记录消息开头的意外长/整数值

时间:2018-04-02 09:17:27

标签: log4j log4j2

我遇到了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,..]。

我假设是与滚动策略相关的内容,但在其他使用相同配置的示例中我看不到它。

有谁知道问题出在哪里以及如何解决?

1 个答案:

答案 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