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

如何使用Log4j 2.13版本生成带AM/PM标识的日志文件名

解决Log4j 2.x半日制日志滚动问题及2.13版本配置指南

首先针对你升级到2.11版本后只生成AM时段日志的问题,我来拆解下原因和解决方案:

问题根源:时间触发策略与日志文件名模式不匹配

在Log4j 2.11中,TimeBasedTriggeringPolicy的interval参数是基于你filePattern中定义的最小时间单位来生效的。你的配置里用了%d{yyyy-MM-dd-a},这个格式对应的是“日期+AM/PM时段”,每个时段跨度是12小时,但你设置的interval="1"会被默认解析为“1小时”,这就导致触发逻辑无法正确识别AM到PM的12小时切换,自然不会生成PM时段的归档日志。

2.11版本的修复配置

修改TimeBasedTriggeringPolicy的interval为12,匹配12小时的时段跨度,同时保留modulate="true"确保滚动对齐到时段的起始时间(比如午夜和中午):

<RollingFile name="file" fileName="testAMPM.log" filePattern="testAMPM.log-%d{yyyy-MM-dd-a}" >
    <PatternLayout pattern="%d %5p %-120m [%t - %c:%L] %n"/>
    <Policies>
        <TimeBasedTriggeringPolicy interval="12" modulate="true" />
    </Policies>
</RollingFile>

另外需要注意:如果你的应用在AM时段启动,要等到中午12点之后有日志写入时,才会触发第一次滚动生成AM归档日志,同时切换到PM的活动日志;如果启动时间在PM时段,同理要等到午夜才会触发滚动。如果想立即验证,可以手动修改系统时间到下一个时段,然后写入日志测试。

Log4j 2.13版本生成带AM/PM标识日志的配置

2.13版本对时间滚动策略做了不少优化,对%a(AM/PM)的解析更精准,配置上可以更简洁:

方案1:保持12小时时段滚动

和上面的配置类似,直接使用%d{yyyy-MM-dd-a}作为归档文件名模式,搭配interval="12"的触发策略即可,逻辑和2.11修复后的一致,但滚动触发的可靠性更高。

方案2:更明确的时间格式(可选)

如果你希望归档文件名包含更具体的时间信息(比如小时),可以把filePattern改为testAMPM.log-%d{yyyy-MM-dd-hh-a},此时interval可以设为12,或者如果想每小时滚动但保留AM/PM标识,也可以设为interval="1",不过这样会生成每个小时的归档文件(比如testAMPM.log-2024-05-20-09-AM),根据你的需求选择即可。示例配置:

<RollingFile name="file" fileName="testAMPM.log" filePattern="testAMPM.log-%d{yyyy-MM-dd-hh-a}" >
    <PatternLayout pattern="%d %5p %-120m [%t - %c:%L] %n"/>
    <Policies>
        <TimeBasedTriggeringPolicy interval="12" modulate="true" />
    </Policies>
</RollingFile>

最后提醒下:不管哪个版本,都要确保Log4j的依赖包是完整的,没有混合不同版本的JAR包,避免出现兼容性问题。

内容的提问来源于stack exchange,提问作者Archana Reddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:17:21