在 Linux 下对 Tomcat 日志进行分割(避免 catalina.out 无限增大),常见有以下几种做法,按推荐程度从简单到专业给你说明。
Tomcat 官方和大多数生产环境都使用 logrotate。
vi /etc/logrotate.d/tomcat
示例(假设 Tomcat 在 /opt/tomcat):
/opt/tomcat/logs/catalina.out {
daily
rotate 7
missingok
notifempty
compress
copytruncate
}
daily:每天分割rotate 7:保留 7 份compress:压缩旧日志copytruncate:复制后清空原文件(Tomcat 不重启也能用)logrotate -d /etc/logrotate.d/tomcat # 模拟执行
logrotate -f /etc/logrotate.d/tomcat # 强制执行
✅ 优点
yum install cronolog # CentOS
apt install cronolog # Ubuntu
编辑 bin/catalina.sh:
找到:
>> "$CATALINA_OUT" 2>&1 &
改为:
2>&1 | /usr/sbin/cronolog /opt/tomcat/logs/catalina.%Y-%m-%d.out &
✅ 效果:
catalina.2026-01-21.out
catalina.2026-01-22.out
⚠️ 缺点:需修改启动脚本,Tomcat 升级可能覆盖
Tomcat 默认使用 java.util.logging,可配置大小滚动:
conf/logging.properties
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
⚠️ 对 catalina.out 无效,只影响 catalina.log
如果你用 Spring Boot 或已集成 Log4j2:
<RollingFile name="CATALINA"
fileName="${sys:catalina.base}/logs/catalina.log"
filePattern="${sys:catalina.base}/logs/catalina.%d{yyyy-MM-dd}.log.gz">
<SizeBasedTriggeringPolicy size="100MB"/>
<TimeBasedTriggeringPolicy/>
</RollingFile>
✅ 可按大小 + 时间切割
❌ 配置复杂
| 场景 | 推荐方案 |
|---|---|
| 生产环境 | ✅ logrotate |
| 老系统 | cronolog |
| 开发调试 | logging.properties |
| 大型项目 | Log4j2 |
如果你愿意,可以告诉我:
我可以给你可直接用的完整配置。