Log4j 未使用最新版本 log4j-2.17.2 滚动更新

Log4j not rolling over with latest version log4j-2.17.2

我有一个 log4j 配置,旨在每天滚动一次文件。它适用于 log4j-2.17.0 和 2.17.1。当我更新到最新版本 2.17.2 时,每日日志停止滚动。

这是我的 log4j.properties:

log4j.rootLogger=INFO, A2

log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.threshold=debug
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d [%t] %-5p - %m%n
log4j.appender.A2.DatePattern='.'MMdd
log4j.appender.A2.File=c:/test/log/test.log
log4j.appender.A2.filePattern=c:/test/log/test.log.%d{MMdd}

我添加的2个开关是 -Dlog4j.configuration=C:/test/log4j.properties 和 -Dlog4j1.compatibility=真

有谁知道为什么从 log4j-2.17.1 升级到 log4j-2.17.2 时会停止每天滚动,以及我需要进行哪些更改才能使其与 2.17.2 一起使用?

来自 Log4j 1.x 的 RollingFileAppender(参见 javadoc)从不支持基于时间的旋转,也不支持 datePatternfilePattern 属性。

Log4j 1.x bridge 2.17.1 有一个错误导致发生基于时间和基于大小的旋转(参见 )。这已在版本 2.17.2 中修复。

如果你想要基于时间的旋转,你需要:

  • 要么配置一个DailyRollingFileAppender
    log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A2.layout=org.apache.log4j.PatternLayout
    log4j.appender.A2.layout.ConversionPattern=%d [%t] %-5p - %m%n
    log4j.appender.A2.DatePattern=.MMdd
    log4j.appender.A2.File=c:/test/log/test.log
    
  • 或者使用 Log4j2 配置文件直接配置 Log4j2 RollingFileAppender
    <RollingFileAppender name="A2"
                         fileName="C:\test\log\test.log"
                         filePattern="C:\test\log\test.log.%d{MMdd}">
        <PatternLayout pattern="%d [%t] %-5p %c - %m%n" />
        <TimeBasedTriggeringPolicy />
    </RollingFileAppender>
    

两种情况下都将使用 Log4j2 RollingFileAppender,但如果您使用 Log4j2 配置文件,您将可以访问附加程序的所有配置选项。