
Logback 的 TimeBasedRollingPolicy 支持按周归档日志,但需使用正确的日期格式(如 yyyy-ww)并确保 fileNamePattern 与 路径逻辑一致;推荐通过变量统一管理路径,避免配置不一致导致滚动失效。
logback 的 `timebasedrollingpolicy` 支持按周归档日志,但需使用正确的日期格式(如 `yyyy-ww`)并确保 `filenamepattern` 与 `
在 Logback 中实现按周滚动(weekly rolling),关键在于正确配置 TimeBasedRollingPolicy 的
✅ 正确的周滚动文件名模式
Logback 支持标准 Java SimpleDateFormat 语法,ww 表示一年中的第几周(01–53),因此以下模式是合法且有效的:
<filenamepattern>logs/app-%d{yyyy-ww}.log.gz</filenamepattern>
⚠️ 注意:%d{yyyy-ww} 会生成类似 app-2024-23.log.gz 的归档文件,且 Logback 会自动在每周一(或触发滚动的第一个事件时间点)创建新归档。但仅模式正确还不够!
❌ 常见错误: 与 路径不一致
正如提问者所遇问题:他将日志文件移动到了新目录(如 /var/log/app-name/),却只更新了
<file>/var/log/app-name/myLog.log</file><!-- ✅ 已更新 -->
但遗漏了
<filenamepattern>log-%d{yyyy-ww}.log.gz</filenamepattern><!-- ❌ 仍写在当前目录,无路径! -->
这会导致 Logback 尝试将归档文件写入工作目录(如 ./log-2024-23.log.gz),而基础日志写在 /var/log/app-name/ ——二者不在同一目录,触发滚动时因路径冲突或权限问题静默失败。
✅ 推荐方案:用 统一管理路径(最佳实践)
通过变量解耦路径定义,提升可维护性与一致性:
<configuration><property name="log_path" value="/var/log/app-name"></property><property name="log_name" value="myLog"></property><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 基础日志文件(当前活跃日志) --><file>${log_path}/${log_name}.log</file><encoder><pattern>%d{ISO8601} [%t] %-5level %logger{36} - %msg%n</pattern></encoder><rollingpolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 归档文件名必须与 <file> 同目录、同前缀! --><filenamepattern>${log_path}/${log_name}.%d{yyyy-ww}.log.gz</filenamepattern><maxhistory>52</maxhistory><!-- 保留最近52周(约1年) --><!-- 可选:启用异步压缩 --><timebasedfilenamingandtriggeringpolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxfilesize>100MB</maxfilesize></timebasedfilenamingandtriggeringpolicy></rollingpolicy></appender><root level="INFO"><appender-ref ref="FILE"></appender-ref></root></configuration>
? 提示:%d{yyyy-ww} 周编号基于 ISO 8601 标准(周一为每周第一天,第1周包含当年第一个周四)。若需兼容其他周起始规则(如周日),需配合 RollingCalendar 或自定义策略,但绝大多数场景 yyyy-ww 已足够。
? 验证与调试建议
- 启用 Logback 内部调试:启动时添加 JVM 参数 -Dlogback.debug=true,观察控制台输出的滚动触发日志;
- 检查归档目录权限:确保应用对 ${log_path} 具有读写权限;
- 避免在 fileNamePattern 中使用相对路径(如 ../logs/...),易引发定位歧义;
- 若需按月滚动,改用 %d{yyyy-MM} 更稳定(月份无跨年歧义)。
通过变量驱动路径、严格保持











