【问题标题】:RollingFile not create new log after midnightRollingFile 在午夜后不创建新日志
【发布时间】:2021-11-27 22:05:59
【问题描述】:

java 1.8

maven 3.5

在 pom.xml 中

<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </dependency>

在我的 Maven java 项目中,我想每天(午夜)生成新的日志文件。

所以我使用 RollingFile 和 cron 0 0 0 * * ?。这是我的 log4j2.xml

<Properties>
    <Property name="baseDir">logs</Property>
    <Property name="patterLayout">%d{[dd.MM.yyyy HH:mm:ss.SSS]} %l %p:%n %m%n</Property>
</Properties>

<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="${patterLayout}"/>-
    </Console>

   
    <RollingFile name="RollingFile" fileName="${baseDir}/app.log"
                 filePattern="${baseDir}/$${date:yyyy-MM}/app-%d{yyyy-MM-dd}.log.gz">
        <PatternLayout pattern="${patterLayout}"/>-
        <CronTriggeringPolicy schedule="0 0 0 * * ?"/>
        <DefaultRolloverStrategy>
            <Delete basePath="${baseDir}" maxDepth="2">
                <IfFileName glob="*/app-*.log.gz"/>
                <IfLastModified age="60d"/>
            </Delete>
        </DefaultRolloverStrategy>
    </RollingFile>
</Appenders>

<Loggers>
    
    <Root level="trace">
        <AppenderRef ref="Console"/>
        <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>

但所有日志都打印在 ONE 文件 app.log 中。

这里的结果:

[27.11.2021 23:59:05.235] com.myproject.xls2metro2.App.main(App.java:18) TRACE:
 JDK: 1.8.0_202
[27.11.2021 23:59:05.238] com.myproject.xls2metro2.App.main(App.java:33) WARN:
 File path is mandatory

[28.11.2021 00:01:13.347] com.myproject.xls2metro2.App.main(App.java:18) TRACE:
 JDK: 1.8.0_202
[28.11.2021 00:01:13.351] com.myproject.xls2metro2.App.main(App.java:33) WARN:
 File path is mandatory

【问题讨论】:

    标签: java maven-3 log4j2


    【解决方案1】:

    首先,验证您的原始配置没有这个连字符(可能是您在写问题时不小心添加了它)

    <PatternLayout pattern="${patterLayout}"/>-
    

    另外,请确保您的代码包含在 Configuration 标记内(为了简洁起见,我假设您已将其省略):

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn" name="MyApp" packages="">
    ... your code here
    </Configuration>
    

    其次,您的配置看起来与official documentation 示例中的完全相同,所以应该没问题。

    但在文档中指出:

    CronTriggeringPolicy 基于 cron 表达式触发翻转。 此策略由计时器控制,并且与处理异步 记录事件,因此有可能记录上一个或 下一个时间段可能出现在日志文件的开头或结尾。 Appender 的 filePattern 属性应该包含时间戳 否则目标文件将在每次翻转时被覆盖。

    所以很可能,这就是你的情况。稍等片刻即可验证,下一个日志将写入单独的文件。

    【讨论】:

    • 您的建议无济于事。所有日志都在一个日志文件中生成
    • @a_subscriber,请确认您使用的是哪个版本。它可能会影响行为:Since log4j-2.5, a custom delete action can be configured in the DefaultRolloverStrategy to run at rollover. Since 2.8 if no file name is configured then DirectWriteRolloverStrategy will be used instead of DefaultRolloverStrategy. Since log4j-2.9, a custom POSIX file attribute view action can be configured in the DefaultRolloverStrategy to run at rollover, if not defined, inherited POSIX file attribute view from the RollingFileAppender will be applied.
    • log4j-slf4j-impl : 2.13.3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 2011-10-14
    • 2022-10-24
    相关资源
    最近更新 更多