rollingfileappender必须配置timebasedrollingpolicy或sizeandtimebasedrollingpolicy才能实现日志滚动,仅配rollingpolicy抽象类无效;filenamepattern需含%d和%i占位符,压缩需显式配置timebasedfilenamingandtriggeringpolicy且后缀为.gz或.zip;路径须用正斜杠或双反斜杠,避免空格;变量需在logback-spring.xml顶部加载。

logback-spring.xml 中 RollingFileAppender 必须配 rollingPolicy 才能切割
没配或配错 rollingPolicy,日志文件永远不滚动,哪怕磁盘快爆了也只写一个 app.log。Spring Boot 默认不启用任何归档策略,XML 里光有 appender 标签没用。
实操建议:
-
rollingPolicy必须是TimeBasedRollingPolicy(按天)或SizeAndTimeBasedRollingPolicy(大小+时间双触发),不能只写RollingPolicy抽象类名 - 如果要用按天归档,
fileNamePattern必须含日期占位符,比如app.%d{yyyy-MM-dd}.%i.log—— 少了%i,当天超限也不会生成app.2024-06-15.1.log -
maxHistory控制保留多少天的压缩包,但注意:它只删「归档后的文件」,不会删当前正在写的app.log
归档压缩必须显式启用 triggeringPolicy + timeBasedFileNamingAndTriggeringPolicy
只配 TimeBasedRollingPolicy,日志会按天切,但不会自动压缩成 .zip 或 .gz。很多人以为加个 <compression>zlib</compression> 就行,其实 logback 不认这个标签。
实操建议:
- 启用压缩必须用
SizeAndTimeBasedRollingPolicy,并嵌套timeBasedFileNamingAndTriggeringPolicy -
fileNamePattern后缀得带.gz或.zip,例如app.%d{yyyy-MM-dd}.%i.log.gz - 压缩依赖 JVM 自带 zlib,不用额外引包;但若用
.zip,需确认 JDK 版本 ≥ 9(旧版 zip 压缩支持弱)
logback-spring.xml 里 springProfile 会影响归档路径解析
在 <springprofile name="prod"></springprofile> 里配的 RollingFileAppender,如果用了 ${LOG_PATH} 这类变量,而该变量只在 application-prod.yml 里定义,启动时会报 java.lang.IllegalStateException: Log path is not set —— 因为 logback 加载早于 Spring Environment 绑定。
实操建议:
- 所有路径变量(如
LOG_PATH)必须在logback-spring.xml顶部用<property resource="application.yml"></property>提前加载,或直接写死路径(开发环境可接受) - 避免在
springProfile块内定义新property,logback 解析不到 - 检查实际生效配置:启动时加
--debug,搜logback关键字,看是否打印出最终解析的fileNamePattern
Windows 下 fileNamePattern 的斜杠和空格会导致归档失败
在 Windows 上写 fileNamePattern="D:logspp.%d{yyyy-MM-dd}.%i.log",logback 会把 l 当转义字符处理,结果路径变成 D:logsapp...,归档目录创建失败,日志静默丢弃。
实操建议:
- 路径一律用正斜杠
/或双反斜杠\,例如D:/logs/app.%d{yyyy-MM-dd}.%i.log - 路径中避免空格,比如
C:/Program Files/...会触发解析异常,改用C:/opt/logs/ - 用
<file></file>指定当前活跃日志路径时,也必须遵守相同规则,否则app.log写不进去
timeBasedFileNamingAndTriggeringPolicy 的嵌套层级,以及 Windows 路径里的反斜杠转义问题。










