我遇到了log4j2的问题,它会将值打印为已记录消息的第一部分。
我使用以下配置,除了不需要的值外,它按预期工作:
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="info">
<Appenders>
<RollingFile name="myappender-app" fileName="C:/Programs/apache-tomcat-8.5.29/logs/app.log" filePattern="C:/Programs/apache-tomcat-8.5.29/logs/%d_app.log">
<PatternLayout>
<pattern>[%t]%5level %d{ISO8601}[%X{mdc-uuid} %X{sessionId}] %c{2} - %m%n%r%throwable{5}</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.mypack.app" level="debug" additivity="false">
<appender-ref ref="myappender-app" level="debug" />
</Logger>
</Loggers>
</Configuration>
结果如下:
[https-jsse-nio-18443-exec-6] INFO 2018-04-02T10:37:24,344[ ] filters.UUIDFilter - First logged message
39736[https-jsse-nio-18443-exec-6] INFO 2018-04-02T10:37:24,596[localhost-1522658244353 ] controller.MyAppController - Second Message
39988[https-jsse-nio-18443-exec-6] INFO 2018-04-02T10:37:24,602[localhost-1522658244353 ].....
39994[https-jsse-nio-18443-exec-6]ERROR 2018-04-02T10:37:54,697[localhost-1522658244353 ]....
other messages
第一条消息是正确的,而其他消息在每行的开头都有这些值[39736,39988,..]。
我假设是与滚动策略相关的内容,但在其他使用相同配置的示例中我看不到它。
有谁知道问题出在哪里以及如何解决?
答案 0 :(得分:0)
问题是%n%r%throwable{5}
在下面一行 -
<pattern>[%t]%5level %d{ISO8601}[%X{mdc-uuid} %X{sessionId}] %c{2} - %m%n%r%throwable{5}</pattern>
%n
指新行字符。 %r
是指自JVM启动到创建日志记录事件以来经过的毫秒数。 %throwable{5}
指的是异常堆栈跟踪。因为您的模式包含%n
所以它将在日志中创建一个新行,然后%r
将记录毫秒数(该不需要的值)。由于没有例外,因此%throwable{5}
没有打印任何内容。
要解决此问题,只需在模式的末尾写入%n
,以便在下一行打印新的日志语句。如果您根本不想打印不需要的值,也可以删除%r
。