Apache Tomcat生产环境需结合logrotate管理catalina.out(如daily、rotate 30、copytruncate),并配置JULI实现其他日志按大小/时间滚动,同时按日志类型差异化设定保留周期(catalina.out保留7天、localhost.*保留30天等),辅以定期校验与磁盘告警机制。

Apache Tomcat 在生产环境中默认的日志(如 catalina.out、localhost.*.log 等)若不加管控,极易因持续追加导致磁盘爆满、排查困难。Java 生态中 Apache 官方并未内置全自动日志轮转与清理机制,需结合系统工具或配置增强方案来实现可控的留存策略。
使用 logrotate 管理 catalina.out(推荐)
catalina.out 是标准输出重定向文件,Tomcat 本身不轮转,必须借助外部工具。Linux 下 logrotate 最稳定可靠:
- 配置示例(
/etc/logrotate.d/tomcat):
/opt/tomcat/logs/catalina.out {
daily
rotate 30
compress
delaycompress
missingok
notifempty
copytruncate
}
关键点说明:
– copytruncate 是核心:先复制再清空原文件,避免 Tomcat 因句柄未刷新而写入丢弃;
– rotate 30 表示保留最近 30 个归档,超期自动删除;
– 不要使用 create,否则可能破坏 Tomcat 对日志文件的打开状态。
启用 JULI 日志的滚动策略(适用于其他 .log 文件)
Tomcat 自带的 JULI(java.util.logging 封装)支持按大小/时间滚动,需修改 $CATALINA_BASE/conf/logging.properties:
- 将
1catalina.org.apache.juli.AsyncFileHandler替换为org.apache.juli.FileHandler(异步处理器不支持滚动); - 设置滚动参数:
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
1catalina.org.apache.juli.FileHandler.maxFileSize = 10MB
1catalina.org.apache.juli.FileHandler.maxBackupIndex = 20
这样 catalina.YYYY-MM-DD.log 会按日切分,单个文件超 10MB 也会触发滚动,最多保留 20 个备份。
立即学习“Java免费学习笔记(深入)”;
区分日志类型,按需设定留存周期
不同日志价值不同,应差异化处理:
-
catalina.out:仅含启动/崩溃/未捕获异常,建议保留 7 天(logrotate中设rotate 7); -
localhost.*.log:应用级请求与异常,建议保留 30 天(JULI 配置maxBackupIndex = 30); -
manager.*.log/host-manager.*.log:管理操作日志,安全审计要求高,建议保留 90 天并同步至集中日志系统(如 ELK); - 应用自定义 log4j2/logback 日志:由应用自身配置滚动策略,Tomcat 不干预。
定期校验与告警机制不可少
再完善的策略也需验证是否生效:
- 写脚本检查
ls -lt logs/ | head -20,确认最新日志文件时间与滚动行为符合预期; - 监控
df -h中日志所在分区使用率,>85% 时触发短信/钉钉告警; - 在 CI/CD 发布流程中加入日志配置一致性检查(如比对
logging.propertiesMD5)。










