
Logback 的 TimeBasedRollingPolicy 要求 fileNamePattern 中的路径与 标签保持一致,且需使用支持时间单位的合法日期格式(如 %d{yyyy-MM} 表示月,%d{yyyy-ww} 并非标准——ww 不被 Logback 原生识别);常见错误是路径不统一或误用日期占位符。
logback 的 `timebasedrollingpolicy` 要求 `filenamepattern` 中的路径与 `
在 Logback 中实现按周滚动(weekly rolling),关键在于两点:正确的日期格式占位符 和 路径一致性。你原配置中使用的 %d{yyyy-ww} 是问题核心——Logback 的 SimpleDateFormat 兼容层不支持 ww(一年中的第几周)作为独立占位符用于文件名生成。虽然 ww 在日志内容中可渲染(如通过 %d{yyyy-ww} 输出文本),但 TimeBasedRollingPolicy 的 fileNamePattern 依赖底层 DateTokenConverter,它仅支持 yyyy、MM、dd、HH、mm、ss 等标准字段,不解析 ww 或 W。因此该模式无法触发滚动。
✅ 正确做法:改用 yyyy-MM(按月)或 yyyy-MM-dd(按天)——这是最稳定、官方推荐的方式。若业务强依赖“自然周”(周一至周日),Logback 本身不原生支持周粒度滚动,但可通过以下方式间接实现:
- 使用 yyyy-MM-dd + maxHistory 控制保留周数(例如 maxHistory="7" 保留最近 7 天);
- 配合外部脚本归档压缩(如 Linux cron 每周一执行 gzip + mv);
- 升级至 Logback 1.4+ 并启用 FixedWindowRollingPolicy + 自定义触发逻辑(复杂,不推荐)。
更关键的是路径一致性:
? 最佳实践:统一使用变量管理路径,避免硬编码和不一致:
<configuration><property name="LOG_DIR" value="/var/log/myapp"></property><property name="LOG_BASE" value="${LOG_DIR}/app"></property><appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_BASE}.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_BASE}.%d{yyyy-MM-dd}.%i.log.gz</filenamepattern><!-- 可选:添加 %i 支持同日内多文件(如异步写满触发) --><timebasedfilenamingandtriggeringpolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxfilesize>100MB</maxfilesize></timebasedfilenamingandtriggeringpolicy><maxhistory>30</maxhistory><!-- 保留30天 --><cleanhistoryonstart>true</cleanhistoryonstart></rollingpolicy></appender><root level="INFO"><appender-ref ref="ROLLING"></appender-ref></root></configuration>
⚠️ 注意事项:
- 不要使用 %d{yyyy-ww}、%d{YYYY-'W'ww} 等非标准格式,Logback 会忽略或报错;
- fileNamePattern 中的目录部分(如 ${LOG_BASE})必须与
完全匹配,包括结尾是否含 /; - 启用
可避免重启时残留旧归档; - 若需严格按周(如每周一归档),建议在应用层记录滚动时间点,或借助运维工具(如 logrotate)接管。
总结:Logback 的时间滚动本质是「基于时间窗口的文件重命名+压缩」,其可靠性建立在标准化日期格式与路径一致性之上。放弃对 ww 的执念,拥抱 yyyy-MM-dd,辅以变量化配置,即可构建健壮、可维护的日志归档体系。











