Java生产环境推荐Logback(Spring Boot默认)或Log4j2实现按天滚动归档,核心是时间窗口触发策略、文件名含日期及自动清理旧日志;Logback用TimeBasedRollingPolicy配%d{yyyy-MM-dd}和maxHistory,Log4j2用TimeBasedTriggeringPolicy加DefaultRolloverStrategy。

Java 生产环境推荐使用 Logback(Spring Boot 默认)或 Log4j2 实现按天滚动归档,核心是配置时间窗口触发策略 + 文件名含日期 + 自动清理旧日志。
Logback 配置(推荐 Spring Boot 项目)
在 logback-spring.xml 中配置 TimeBasedRollingPolicy:
- 用
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">指定按天切分 -
<fileNamePattern>必须含%d{yyyy-MM-dd},如logs/app.%d{yyyy-MM-dd}.%i.log(%i支持同一天多文件,防丢失) - 通过
<maxHistory>控制保留天数(如 30 表示只留最近 30 天) - 搭配
<totalSizeCap>防止单日日志过大(可选,需配合FixedWindowRollingPolicy或启用prudent模式)
Log4j2 配置(非 Spring Boot 或需统一日志框架)
在 log4j2.xml 中使用 TimeBasedTriggeringPolicy + DefaultRolloverStrategy:
<RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app.%d{yyyy-MM-dd}-%i.log">- 触发策略设为
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>(每天零点滚动) - 归档策略中设置
<DefaultRolloverStrategy max="30">限制最多存 30 个归档文件 - 如需按总大小清理,加
<Delete basePath="logs" maxDepth="1">配合条件(如 lastModified 30 天前)
关键注意事项
- 确保 JVM 启动时系统时区与业务时区一致(如
-Duser.timezone=Asia/Shanghai),否则滚动时间可能偏差 - 生产环境禁用
prudent=true(Logback)或append=false(Log4j2),避免性能损耗;多实例部署需用不同日志路径或加机器标识 - 日志目录需有写权限,建议提前创建并设好 umask 或属组(如
chown -R app:app logs/) - 上线前用
date -s "tomorrow"模拟时间跳变,验证滚动是否正常(注意不要在生产机直接操作)
补充:不依赖框架的轻量方案
若项目极简(如纯 Java SE),可用 JUL(java.util.logging) 配合自定义 Handler,但维护成本高、功能弱;更稳妥的做法仍是引入 Logback(仅 2 个 jar)并精简配置。
立即学习“Java免费学习笔记(深入)”;


















