在 Ubuntu 上,Tomcat 日志(如 catalina.out)默认不会自动分割,时间久了会非常大。常见做法有 几种方案,从简单到专业依次说明。
logrotate(推荐,系统级方案)Ubuntu 自带 logrotate,适合分割 catalina.out。
sudo vim /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 不重启也能用)sudo logrotate -d /etc/logrotate.d/tomcat
sudo logrotate -f /etc/logrotate.d/tomcat
✅ 优点:简单、稳定、无需改 Tomcat 配置
❌ 缺点:不是“真正”的按时间命名日志
cronolog(经典 Tomcat 方案)sudo apt update
sudo apt install cronolog
catalina.sh找到:
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 "&"
改为:
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
| /usr/bin/cronolog /opt/tomcat/logs/catalina.%Y-%m-%d.out &
重启 Tomcat 后,日志会变成:
catalina.2026-01-21.out
catalina.2026-01-22.out
✅ 优点:按日期命名,清晰
❌ 缺点:需改启动脚本
log4j2 / logging.properties(应用级)如果是 应用日志(不是 catalina.out):
handlers = 1catalina.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.
或使用 log4j2:
<RollingFile name="RollingFile"
fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="%d %p %c{1.} %m%n"/>
<TimeBasedTriggeringPolicy />
</RollingFile>
✅ 适合业务日志
❌ 不能分割 catalina.out
JULI(内置)Tomcat 自带 AsyncFileHandler,可配置:
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
但 仍不自动按天分割,需配合 logrotate。
| 场景 | 推荐 |
|---|---|
| 只分割 catalina.out | logrotate |
| 想按日期命名 | cronolog |
| 业务日志 | log4j2 |
如果你愿意,可以告诉我:
我可以给你 精确配置。