在 Ubuntu 上,Tomcat 默认日志(如 catalina.out)不会自动分割,时间久了会非常大。常见做法有以下几种,从简单到专业给你说明。
Ubuntu 自带 logrotate,非常适合 Tomcat。
sudo vi /etc/logrotate.d/tomcat
示例配置(假设 Tomcat 安装在 /opt/tomcat):
/opt/tomcat/logs/catalina.out {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
}
daily:每天分割rotate 14:保留 14 天compress:压缩旧日志copytruncate:复制后清空原文件(Tomcat 不重启)sudo logrotate -d /etc/logrotate.d/tomcat
sudo logrotate -f /etc/logrotate.d/tomcat
✅ 优点:简单、稳定、无需改 Tomcat
❌ 缺点:不是实时分割
sudo apt update
sudo apt install cronolog
编辑:
sudo vi /opt/tomcat/bin/catalina.sh
找到:
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
改为:
CATALINA_OUT="/opt/tomcat/logs/catalina.%Y-%m-%d.out"
并修改启动命令(大约 400 行附近):
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 &
改为:
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
| /usr/bin/cronolog "$CATALINA_OUT" &
重启 Tomcat 后日志会按天生成。
✅ 优点:按时间自动分割
❌ 缺点:需改启动脚本
如果你只是想分割 应用日志,而不管 catalina.out:
修改:
/opt/tomcat/conf/logging.properties
示例:
1catalina.org.apache.juli.FileHandler.rotatable = true
1catalina.org.apache.juli.FileHandler.bufferSize = 8192
或使用 log4j2 + RollingFileAppender(更灵活)。
| 场景 | 推荐 |
|---|---|
| 一般服务器 | logrotate |
| 日志量大 | cronolog |
| 微服务/容器 | log4j2 + 外部采集(ELK) |
copytruncate 不会丢日志,但瞬间可能丢几 KB如果你愿意,可以告诉我:
我可以帮你写完整可用配置。