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

















