Log4j2 滚动文件附加程序文件名日期延迟
Log4j2 rolling file appenders file name date is delayed
我正在使用 spring-boot-starter-log4j2
,log4j-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
经过几天的研究,发现我理想中的日志记录可以通过以下更改实现。
更改:
RollingRandomAccessFile
到 RollingFile
CronTriggeringPolicy
到 TimeBasedTriggeringPolicy
不确定将 RollingRandomAccessFile
与 CronTriggeringPolicy
一起使用是否存在错误/冲突。
以下是我的配置,供遇到与我相同问题的人使用。
<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>
我正在使用 spring-boot-starter-log4j2
,log4j-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
经过几天的研究,发现我理想中的日志记录可以通过以下更改实现。
更改:
RollingRandomAccessFile
到RollingFile
CronTriggeringPolicy
到TimeBasedTriggeringPolicy
不确定将 RollingRandomAccessFile
与 CronTriggeringPolicy
一起使用是否存在错误/冲突。
以下是我的配置,供遇到与我相同问题的人使用。
<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>