Tomcat 日志过大是生产环境常见问题,可以从配置优化、日志切割、清理策略、代码层面几个方面来处理。
Tomcat 常见日志文件:
catalina.out:最容易导致过大(所有控制台输出)catalina.log / localhost.log / host-manager.log / manager.logaccess_log(访问日志)catalina.out 默认不会自动切割,最容易爆盘。
/etc/logrotate.d/tomcat
示例:
/opt/tomcat/logs/catalina.out {
daily
rotate 7
missingok
notifempty
compress
copytruncate
}
copytruncate很关键,避免 Tomcat 写文件句柄失效
不直接写 catalina.out,由日志框架控制。
减少不必要的日志:
# 降低级别
.level = INFO
org.apache.catalina.level = WARNING
在 server.xml:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log"
suffix=".txt"
rotatable="true"
maxDays="30" />
maxDays 控制保留天数。
很多“Tomcat 日志大”其实是 应用日志:
示例(Logback):
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>logs/app-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
find /opt/tomcat/logs -name "*.log" -mtime +30 -delete
加 crontab:
0 2 * * * /bin/bash /opt/clean_tomcat_logs.sh
❌ 直接 rm catalina.out(可能导致写失败)
❌ 完全关闭日志(不利于排查问题)
✅ catalina.out → logrotate 切割
✅ 应用日志 → Logback 滚动
✅ access log → maxDays 限制
✅ 定期清理脚本
如果你愿意,可以告诉我:
catalina.out 还是应用日志大我可以给你一套可直接用的配置。