繁体   English   中英

log4j2没有写入日志文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM