Log4j2 滚动文件附加程序文件名日期延迟

Log4j2 rolling file appenders file name date is delayed

我正在使用 spring-boot-starter-log4j2log4j-core 2.14.1

我在 main 中创建了一个计时器用于测试,每 20 秒打印一次日志“hello”

我必须创建以日期作为文件名的日志,现在我正在用分钟测试它。

但是,当我在 Appenders 下应用时,文件名工作异常,就像日志文件延迟 1 分钟一样。

追加器:

        <RollingRandomAccessFile name="FullLogFile" filePattern="${fullLogBasePath}/%d{yyyy-MM-dd-HH-mm}_${MY_HOST}.log.gz">

            <PatternLayout pattern="${sys:FILE_LOG_PATTERN}" charset="${sys:CHARSET}"/>

            <Policies>
                <CronTriggeringPolicy schedule="0 * * ? * *" evaluateOnStartup="true"/>
            </Policies>

            <DirectWriteRolloverStrategy>
                <Delete basePath="${fullLogBasePath}/" maxDepth="2">
                    <IfFileName glob="*_My-Host-Variable-*.log.gz" />
                    <IfLastModified age="PT60M" />
                </Delete>
            </DirectWriteRolloverStrategy>

        </RollingRandomAccessFile>

示例结果:zcat 2021-08-27-13-52_My-Host-Variable.log.gz

2021-08-27 13:53:12.078  INFO 1 --- [Timer-0] h.c.h.m.SayHello                         : hello
2021-08-27 13:53:32.079  INFO 1 --- [Timer-0] h.c.h.m.SayHello                         : hello
2021-08-27 13:53:52.078  INFO 1 --- [Timer-0] h.c.h.m.SayHello                         : hello

我期待的是,文件名 13-52 应该包含时间为 13:52:00~13:52:59 的日志,但现在它正在记录 13:53:00~13:53:59。

是否是此设置的预期结果>?如何实现我的理想,记录正确的时间>?

edit1:发现有人和我有同样的问题。参考:link

经过几天的研究,发现我理想中的日志记录可以通过以下更改实现。

更改:

  • RollingRandomAccessFileRollingFile
  • CronTriggeringPolicyTimeBasedTriggeringPolicy

不确定将 RollingRandomAccessFileCronTriggeringPolicy 一起使用是否存在错误/冲突。

以下是我的配置,供遇到与我相同问题的人使用。

<RollingFile name="FullLogFile" filePattern="${fullLogBasePath}/%d{yyyy-MM-dd}_${MY_HOST}.log.gz">

    <PatternLayout pattern="${sys:FILE_LOG_PATTERN}" charset="${sys:CHARSET}"/>

    <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true" />
    </Policies>

    <DirectWriteRolloverStrategy>
        <Delete basePath="${fullLogBasePath}/" maxDepth="2">
            <IfFileName glob="*_my-host-name-*.log.gz" />
            <!--        delete log after 90 day -->
            <IfLastModified age="P90D" />
        </Delete>
    </DirectWriteRolloverStrategy>

</RollingFile>