You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:18:05