Log4j2滚动日志Appender文件名日期延迟1分钟 如何调整配置
问题解答
一、该现象是否为预期结果
是,这是你当前使用的CronTriggeringPolicy的默认行为。Log4j2的Cron滚动策略默认以滚动触发时刻的时间作为文件名的时间基准,且该时间默认对应上一个滚动窗口的结束时间,因此会出现文件名时间比实际日志所属时段早1个滚动周期(此处为1分钟)的错位。
二、解决方案
方案1:调整日期占位符增加时间偏移(保留现有Cron配置)
在filePattern的日期格式化参数中增加1分钟的负偏移,让文件名时间对应滚动窗口的开始时间,修改后的配置如下:
<RollingRandomAccessFile name="FullLogFile" filePattern="${fullLogBasePath}/%d{yyyy-MM-dd-HH-mm}{, -PT1M}_${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>
注:
%d{yyyy-MM-dd-HH-mm}{, -PT1M}中第二个参数的-PT1M代表将日期计算偏移-1分钟,适配你使用的2.14.1版本,可直接生效。
方案2:替换为TimeBasedTriggeringPolicy(更简单的按周期滚动配置)
如果不需要定制复杂的Cron触发规则,仅需要固定分钟粒度滚动,直接使用TimeBasedTriggeringPolicy更符合需求,修改Policies部分配置即可:
<Policies> <!-- interval=1代表按filePattern的最小时间粒度(此处为分钟)每1个单位滚动一次,modulate=true对齐到整分触发 --> <TimeBasedTriggeringPolicy interval="1" modulate="true"/> </Policies>
该配置无需修改filePattern,即可自动实现文件名时间与日志所属时段完全匹配。
内容的提问来源于stack exchange,提问作者Vincent Tang
相关产品推荐
相关产品推荐

