Ubuntu 上 Tomcat 日志过大的原因通常不是单一问题,而是多个日志机制叠加 + 配置不当共同导致的。下面按常见原因 → 对应解决办法来说明,基本可以覆盖 90% 的场景 ✅
Tomcat 在 logs/ 目录下通常会有:
catalina.out ← 最大元凶(不轮转)
catalina.2026-01-21.log
localhost.log
manager.log
host-manager.log
access_log.*.txt
其中,catalina.out 是重点问题对象。
catalina.out 不会自动切割(最常见原因)catalina.out 是 标准输出 / 标准错误✅ 常见于:
System.out.println()比如:
System.out.printlnDEBUG 或 ALL结果:
catalina.out + 应用日志文件Tomcat 默认会生成:
localhost_access_log.2026-01-21.txt
如果:
也会非常大
Ubuntu 虽然有 logrotate,但:
logrotate 配置错误常见现象:
df -h 仍然满原因:
lsof | grep deleted
Tomcat 仍然持有已删除文件句柄
cd /opt/tomcat/logs # 或 /var/log/tomcat9
du -sh *
重点看:
catalina.outaccess_logcatalina.out(最重要)修改 bin/catalina.sh 或 systemd 启动参数:
CATALINA_OUT=/dev/null
✅ 适用于:
sudo nano /etc/logrotate.d/tomcat
示例:
/opt/tomcat/logs/catalina.out {
copytruncate
daily
rotate 7
compress
missingok
notifempty
}
✅ 不要使用:
System.out.println();
✅ 使用:
并控制级别:
<root level="INFO">
conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b"
maxDays="7" />
重点:
maxDays="7"
logrotate -d /etc/logrotate.d/tomcat
lsof | grep deleted
解决方式:
systemctl restart tomcat
✅ 最佳实践
catalina.outserver.xmlcatalina.sh你可以直接贴:
ls -lh /opt/tomcat/logs
cat conf/server.xml