核心是日志“自动轮转+智能清理”,logback需配置sizeandtimebasedrollingpolicy,设maxhistory=15、totalsizecap=8gb、filenamepattern含日期并启用压缩与cleanhistoryonstart,辅以docker日志限制和系统级logrotate兜底。

核心是让日志“自动轮转 + 智能清理”,而不是等磁盘报警了再手动删。Logback(Spring Boot 默认)配对使用时间/大小滚动策略和清理上限,就能从源头堵住漏洞。
用 RollingFileAppender 实现自动轮转
别只写一个 <file>logs/app.log</file> —— 这会让日志无限追加。必须启用滚动策略:
- 按天切分 + 按大小切分:推荐
SizeAndTimeBasedRollingPolicy,兼顾可读性与可控性 - 关键配置示例:
<filenamepattern>logs/app-%d{yyyy-MM-dd}.%i.log</filenamepattern><maxfilesize>10MB</maxfilesize><maxhistory>15</maxhistory><totalsizecap>8GB</totalsizecap> - 注意:
totalSizeCap必须配合maxHistory > 0和含日期的fileNamePattern才生效,否则不清理
强制压缩归档日志节省空间
旧日志不用留原文,压缩后体积通常只剩 10%~20%:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 在
rollingPolicy下添加:<timebasedfilenamingandtriggeringpolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"></timebasedfilenamingandtriggeringpolicy> - 加上
<cleanhistoryonstart>true</cleanhistoryonstart>,应用重启时自动清理过期归档 - 文件名带
.zip或.gz后缀(如app-2026-09-14.0.log.gz),Logback 会自动压缩
双保险:配置 totalSizeCap + maxHistory
只设保留天数(maxHistory=30)很危险——某天突发错误,单日打满 50GB,30 天就是 1.5TB。必须叠加总量封顶:
-
<maxhistory>15</maxhistory>:最多保留 15 天的日志目录 -
<totalsizecap>8GB</totalsizecap>:所有归档日志加起来不超过 8GB - 二者同时生效,Logback 会在每次归档后检查并删除最老的文件,直到满足两个条件
生产环境额外建议
光靠 Logback 不够,还需系统级兜底:
- 容器部署时,Docker daemon 配置
"max-size":"50m","max-file":"3",防止单个容器日志失控 - Linux 上用
logrotate管理非 Java 进程日志(如catalina.out),并确保postrotate调用kill -USR1或FLUSH LOGS - 加一行 JVM 参数:
-Duser.timezone=Asia/Shanghai,避免因时区错乱导致maxHistory计算失效 - 高频 ERROR 日志?加限流:用
RateLimiter.create(2)控制每秒最多打 2 条 ERROR,防异常循环刷屏
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










