[英]log4j2 not writing in the log files
我想使用log4j2来满足我的应用程序需求。 我在ThreadContext中使用RollingAppender和变量。
这是我的log4j2.xml
<Configuration>
<Appenders>
<Routing name="RoutingAppender">
<Routes pattern="$${ctx:FlowName}">
<Route>
<RollingFile name="Audit-${ctx:FlowName}"
fileName="logs/Audit-${ctx:FlowName}.log"
filePattern="logs/Audit-${ctx:FlowName}.%i.log.gz"
immediateFlush="true">
<PatternLayout>
<pattern>"%m%n"<pattern/>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="6" modulate="true" />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
</RollingFile>
</Route>
</Routes>
</Routing>
</Appenders>
<Loggers>
<Root level="trace">
<appender-ref ref="RoutingAppender" level="info"/>
</Root>
<Logger name="AuditNippin" level="info" >
<AppenderRef ref="myRoutingAppender"/>
</Logger>
</Loggers>
</Configuration>
这是java代码:
package be.myApp;
public class myClass{
private static final org.apache.logging.log4j.core.Logger AUDITLOGGER =
(org.apache.logging.log4j.core.Logger) org.apache.logging.log4j.LogManager.getLogger("myRoutingAppender");
public void doSomething(){
ThreadContext.put("FlowName", "MyFlow");
AUDITLOGGER.info("coucou");
ThreadContext.remove("FlowName");
}
}
这将根据上下文正确创建文件。 但是在日志文件中什么都不写。
首先,你的log4j2 XML中存在语法问题:
<pattern />
这应该是</pattern>
<AppenderRef ref =“myRoutingAppender”/>
这应该是: <AppenderRef ref="RoutingAppender" />
此外,由于您使用的是基于TimeBased
触发策略,因此您必须在RollingFile
appender的filePattern中使用日期模式。 请参阅RollingFileAppender的文档 。
最后,您可能不希望在PatternLayout的模式中引用:
<图案> “%米%N”<图案/>
你可能意味着: <pattern>%m%n<pattern/>
修复上述所有内容后,您应该在日志文件中看到日志,但这只是因为在以下代码运行时它将获得根记录器:
LogManager.getLogger( “myRoutingAppender”);
由于您没有具有该名称的记录器,因此它将获得将使用路由追加器并写入日志文件的根记录器。 我的猜测是你打算调用getLogger("AuditNippin")
因为这是你在配置文件中指定的唯一命名记录器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.