使用Log4j 1.x桥时,Log4j RollingFileAppender的行为很奇怪

4bbkushb  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(248)

当我迁移到log4j2时,我已经将Tomcat Web应用程序配置为使用Log4j 1.x桥。https://logging.apache.org/log4j/2.x/manual/migration.html
我继续使用现有的log4j.properties文件,该文件如下所示:

log4j.rootLogger=INFO, file

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/var/log/mylog.out
log4j.appender.file.MaxFileSize=10KB
log4j.appender.file.MaxBackupIndex=2
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %-5p %t %c - %m%n

这成功地创建了我的日志文件,并在10KB时滚动。
我遇到了一个无法解释的问题。以下是我的日志目录中的文件:

-rw-r----- 1 root root 7.6K Jan 10 12:27 test.log
-rw-r----- 1 root root 11K Jan 10 12:27 test.log.1
-rw-r----- 1 root root 36K Jan 10 12:27 test.log.2
-rw-r----- 1 root root 11K Jan 10 12:27 test.log2022-01-10

我得到了一个以当天命名的日志文件。我做过实验,看起来RollingFileAppender在每天结束时也在滚动。在使用桥之前它没有这样做。知道为什么会发生这种情况以及如何阻止它吗?

aor9mmx1

aor9mmx11#

编辑:这是一个错误,在版本2.17.2中为fixed

这是一个bug,你应该报告它。RollingFileAppenderBuilder(参见源代码)有一个包含日期而不是数字的filePattern

String filePattern = fileName +"%d{yyy-MM-dd}";
        TriggeringPolicy timePolicy = TimeBasedTriggeringPolicy.newBuilder().setModulate(true).build();
        SizeBasedTriggeringPolicy sizePolicy = SizeBasedTriggeringPolicy.createPolicy(maxSize);
        CompositeTriggeringPolicy policy = CompositeTriggeringPolicy.createPolicy(sizePolicy, timePolicy);
        RolloverStrategy strategy = DefaultRolloverStrategy.newBuilder()
                .setConfig(config)
                .setMax(maxBackups)
                .build();
        return new AppenderWrapper(RollingFileAppender.newBuilder()
                .setName(name)
                .setConfiguration(config)
                .setLayout(fileLayout)
                .setFilter(fileFilter)
                .setBufferedIo(bufferedIo)
                .setImmediateFlush(immediateFlush)
                .setFileName(fileName)
                .setFilePattern(filePattern)
                .setPolicy(policy)
                .setStrategy(strategy)
                .build());

因此它的行为更像是DailyRollingFileAppender,而不是Log4j 1.x RollingFileAppender
作为一种解决方法,您可以通过设置以下系统属性来使用旧版Log4j1ConfigurationFactory

log4j2.configurationFactory=org.apache.log4j.config.Log4j1ConfigurationFactory
log4j2.configurationFile=classpath:log4j.properties

相关问题