Tomcat 日志过大是常见问题,通常可以从定位日志来源 → 调整日志配置 → 限制大小和轮转 → 必要时清理几个层面来解决。下面按常见场景给你完整方案。
Tomcat 常见日志文件:
| 日志 | 说明 |
|---|---|
catalina.out |
标准输出/错误,最容易暴涨 |
localhost.*.log |
应用异常 |
manager.*.log |
manager 应用 |
host-manager.*.log |
host-manager |
localhost_access_log.*.txt |
访问日志(access log) |
du -sh logs/*
rm catalina.out # ❌ 可能导致日志无法写入
创建 /etc/logrotate.d/tomcat:
/opt/tomcat/logs/catalina.out {
daily
rotate 7
missingok
notifempty
compress
copytruncate
}
说明:
daily:每天切割rotate 7:保留 7 份compress:压缩旧日志copytruncate:不重启 Tomcat执行测试:
logrotate -d /etc/logrotate.d/tomcat
修改 catalina.sh 或 setenv.sh:
CATALINA_OUT_CMD="|/usr/bin/cronolog $CATALINA_BASE/logs/catalina.%Y-%m-%d.out"
重启 Tomcat 后按天生成日志。
很多项目日志同时输出到 catalina.out + log4j/logback,导致翻倍。
conf/logging.properties减少或关闭控制台日志:
handlers = 1catalina.org.apache.juli.AsyncFileHandler
.handlers = 1catalina.org.apache.juli.AsyncFileHandler
或限制大小:
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 7
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"
rotatable="true"/>
✅ maxDays="7" 自动清理
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</configuration>
✅ 控制日志级别(不要 DEBUG 跑生产)
# 清空而不删除
: > logs/catalina.out
或:
truncate -s 0 logs/catalina.out
✅ 生产环境必做
logrotate✅ 避免
rm 删除日志如果你愿意,可以告诉我:
我可以帮你给出完全针对你环境的配置示例。