
本文详解如何使用 Logback 的 CronTriggeringPolicy 和 TimeBasedRollingPolicy 实现精确按小时滚动日志,生成如 service.2024-05-20_14.log 的归档文件,且永不删除旧文件。
本文详解如何使用 logback 的 `crontriggeringpolicy` 和 `timebasedrollingpolicy` 实现精确按小时滚动日志,生成如 `service.2024-05-20_14.log` 的归档文件,且永不删除旧文件。
在微服务架构中,按固定时间窗口(如每小时)切分日志文件,有助于日志归档、监控分析与故障追溯。Logback 默认的 TimeBasedRollingPolicy 基于日志写入触发滚动,若应用空闲则可能延迟归档;要实现严格每小时整点生成新文件(无论是否有日志写入),必须结合 CronTriggeringPolicy —— 它基于 Quartz Cron 表达式主动触发滚动,确保准时性。
✅ 正确配置要点
-
启用 Cron 触发器:在
<rollingpolicy></rollingpolicy>内添加<crontriggeringpolicy></crontriggeringpolicy>,并设置schedule="0 0 0/1 * * ?"(即每小时第 0 分第 0 秒触发); -
禁用自动清理:将
<maxhistory></maxhistory>设为0或完全移除该标签(Logback 2.0+ 中maxHistory=0表示无限保留); -
统一时间格式:
<filenamepattern></filenamepattern>使用%d{yyyy-MM-dd_HH}(下划线更安全,避免冒号在 Windows 路径中非法); -
移除冗余配置:
totalSizeCap和SizeAndTimeBasedFNATP在纯时间驱动场景下非必需,反而可能干扰行为。
✅ 推荐配置(已验证可用)
<configuration>
<property name="LOG_DIR" value="logs" />
<property name="ARCHIVE_DIR" value="${LOG_DIR}/archived" />
<appender name="FILE-ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/campaign-service.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每小时生成形如: archived/campaign-service.2024-05-20_14.log -->
<fileNamePattern>${ARCHIVE_DIR}/campaign-service.%d{yyyy-MM-dd_HH}.log</fileNamePattern>
<!-- 关键:禁用自动清理,永久保留所有归档 -->
<maxHistory>0</maxHistory>
<!-- 关键:每小时整点强制触发滚动 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.CronTriggeringPolicy">
<schedule>0 0 0/1 * * ?</schedule>
<evaluateOnStartup>true</evaluateOnStartup>
</triggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 根日志器启用文件输出 -->
<root level="info">
<appender-ref ref="FILE-ROLLING"/>
</root>
<!-- 可选:指定包级别日志(如您的 com.credence) -->
<logger name="com.credence" level="trace" additivity="false">
<appender-ref ref="FILE-ROLLING"/>
</logger>
</configuration>⚠️ 注意事项
-
Cron 表达式说明:
0 0 0/1 * * ?表示“秒=0,分=0,小时=0/1(从0点起每1小时),日/月/周任意”,即每天 00:00、01:00、02:00…整点触发; -
Logback 版本要求:
CronTriggeringPolicy自 Logback 1.3.0+ 正式支持(推荐使用 1.4.x 或更高版本); -
路径权限:确保应用对
logs/和logs/archived/目录有读写权限,首次运行时需手动创建目录或配置mkdir逻辑; -
避免重复 logger:原配置中
com.credence日志器被定义两次(含STDOUT),易导致日志重复输出,应合并或明确additivity="false"; -
测试验证:启动后观察
logs/下主文件是否持续写入,archived/目录是否在每小时整点生成新文件(如campaign-service.2024-05-20_15.log),且历史文件不被删除。
通过以上配置,您即可获得稳定、可预测、零丢失的小时级日志归档能力,满足审计、批处理与长期存储需求。

















