在 Ubuntu 上分割(切割、轮转)Tomcat 日志,常见有三种方式:使用 logrotate(推荐)、使用 Tomcat 自带日志机制、手动或脚本切割。下面按常用程度详细说明。
logrotate(最推荐 ✅)Ubuntu 自带 logrotate,非常适合按天/大小切割 Tomcat 日志。
sudo vim /etc/logrotate.d/tomcat
假设 Tomcat 安装在:
/opt/tomcat
/opt/tomcat/logs/catalina.out {
daily
rotate 30
missingok
notifempty
compress
copytruncate
dateext
dateformat -%Y%m%d
}
| 参数 | 作用 |
|---|---|
| daily | 每天切割 |
| rotate 30 | 保留 30 个备份 |
| missingok | 日志不存在不报错 |
| notifempty | 空文件不切割 |
| compress | 压缩旧日志 |
| copytruncate | 复制后清空原文件(Tomcat 不重启) |
| dateext | 使用日期作为后缀 |
sudo logrotate -d /etc/logrotate.d/tomcat
强制立即执行:
sudo logrotate -f /etc/logrotate.d/tomcat
Tomcat 支持按天生成日志文件。
vim /opt/tomcat/conf/logging.properties
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.suffix = .log
1catalina.org.apache.juli.AsyncFileHandler.rotatable = true
✅ Tomcat 会自动生成:
catalina.2026-01-21.log
⚠️ 注意:
catalina.out适合特殊需求,不推荐新手使用。
#!/bin/bash
LOG=/opt/tomcat/logs/catalina.out
DATE=$(date +%Y%m%d)
cp $LOG $LOG.$DATE
echo "" > $LOG
chmod +x /opt/cut_tomcat_log.sh
加入 crontab:
0 0 * * * /opt/cut_tomcat_log.sh
⚠️ 风险:可能丢日志、需重启或 reload
| 场景 | 推荐方式 |
|---|---|
| 切割 catalina.out | ✅ logrotate |
| 切割 catalina.xxx.log | Tomcat logging.properties |
| 生产环境 | ✅ logrotate |
| 不想重启 Tomcat | ✅ logrotate (copytruncate) |
✅ 使用 copytruncate 可避免
✅ 一定要用 logrotate
❌ logrotate 不需要
如果你愿意,可以告诉我:
我可以帮你定制一份完全可用的 logrotate 配置。