在 Linux 下,Tomcat 日志(主要是 catalina.out)如果长期不分割,会变得非常大,影响排查和维护。下面介绍几种常用且实用的 Tomcat 日志分割方案,从简单到专业。
# CentOS
yum install cronolog -y
# Ubuntu / Debian
apt-get install cronolog -y
编辑 bin/catalina.sh
找到这一行(大约在 400 行左右):
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 &
改为:
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
| /usr/sbin/cronolog "$CATALINA_BASE/logs/catalina.%Y-%m-%d.out" &
bin/shutdown.sh
bin/startup.sh
✅ 效果:
logs/catalina.2025-01-21.out
logs/catalina.2025-01-22.out
适合已有大日志文件的情况。
vi /etc/logrotate.d/tomcat
内容示例:
/opt/tomcat/logs/catalina.out {
daily
rotate 30
missingok
notifempty
compress
copytruncate
}
daily:每天分割rotate 30:保留 30 天compress:压缩旧日志copytruncate:不重启 Tomcat 直接截断logrotate -f /etc/logrotate.d/tomcat
✅ 无需修改 Tomcat 配置
如果你控制应用代码:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
✅ 适合业务日志,不适合 catalina.out
类似 cronolog:
| /usr/sbin/rotatelogs "$CATALINA_BASE/logs/catalina.%Y%m%d.out" 86400
| 方案 | 是否改 Tomcat | 是否重启 | 推荐度 |
|---|---|---|---|
| cronolog | ✅ | ✅ | ⭐⭐⭐⭐ |
| logrotate | ❌ | ❌ | ⭐⭐⭐⭐⭐ |
| logback | ✅ | ✅ | ⭐⭐⭐ |
| rotatelogs | ✅ | ✅ | ⭐⭐⭐ |
✅ logrotate(catalina.out) + logback(业务日志)
如果你愿意,可以告诉我:
我可以给你定制化配置。