当前位置: 首页 > 知识库问答 >
问题:

当使用Log4j 1时,Log4j RollingFileAppender具有奇怪的行为。x桥

皮嘉德
2023-03-14

在迁移到log4j2的过程中,我已经将tomcatweb应用程序配置为使用log4j1。x桥。我在这里遵循了迁移指南:https://logging.apache.org/log4j/2.x/manual/migration.html

我继续使用我现有的log4j。如下所示的属性文件:

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也在每天结束时滚动。它在使用桥梁之前没有这样做。知道为什么会发生这种情况以及如何阻止它吗?

共有1个答案

丁和歌
2023-03-14

这是一个错误,你应该报告它。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());

因此,它的行为更像是dailrollingfileappender,然后是log4j1。xRollingFileAppender

作为一种解决方法,您可以通过设置以下系统属性来使用较旧的Log4j1ConfigurationFactory

log4j2.configurationFactory=org.apache.log4j.config.Log4j1ConfigurationFactory
log4j2.configurationFile=classpath:log4j.properties
 类似资料:
  • 鉴于以下代码: 为什么开关语句在上匹配? 我的理解是,当时,不匹配,因为(实际上)计算结果为false。VS Code上的IntelliSense告诉我,也是一个

  • 问题内容: 我在JTextPane / JTextField(或它们下方的字体渲染中的某个地方)中发现了一个奇怪的错误。我想知道是否有人遇到过这种情况,并且可能对此有解决方案。 我试图在JTextPane中显示一些“特殊”或稀有字符,并且一旦更改JTextField的字体(与JTextPane完全无关!),JTextPane就会“分手”,不再显示这些字符字符。 这应该可以更好地解释我的意思: 编辑

  • 我有以下代码来解析一个JSON文件: 要处理以下JSON文件: 如果我执行此代码,我将收到以下错误: 所以我开始一步一步地调试应用程序,看看part processing()中的哪个代码部分抛出了这个异常。令人惊讶的是,那里的所有代码都正常执行:没有抛出异常,也没有返回结果I except。 更让我惊讶的是,当我稍微改变第一种方法的代码时,它可以在不产生异常的情况下工作。 我不知道println方

  • 我正在使用Mapstruct映射将一个POJO转换为另一个POJO模型 以下是mapstruct自动生成的方法 该方法基本上获取源POJO的映射,并将其转换为目标模型的映射。生成正在通过。 当我运行代码时,我在这个方法中得到了ClassCast异常:HeaderAttributeGenericDataTypeMaptoStringEnergiectAttributeDataMap 堆栈跟踪: 我还

  • 问题内容: 我看到了我认为是错误的行为。@InjectMocks似乎并没有在每种测试方法之前创建一个新的测试主题。就像@Mock一样。在下面的示例中,如果Subject.section是最后一个,则@Test失败。如果不是最后两个都通过。我当前的解决方法是使用@BeforeClass,但这并不理想。 Subject.java: Section.java: SubjectTest.java 干杯。

  • 问题内容: 请考虑以下示例Java类(下面的pom.xml): 我写一个FileOutputStream,然后尝试删除该文件, 而不先关闭Stream 。这是我最初的问题,当然是错误的,但它导致了一些奇怪的发现。 在Windows 7上运行主方法时,它将产生以下输出: 为什么第一次调用Files.delete()不会引发异常? 为什么以下对Files.exist()的调用返回false? 为什么无