在 Linux 下,Tomcat 自身默认不会自动切割日志,常见的日志切割方案有以下几种,按“推荐程度”给你说明:
logrotate(✅ 最推荐,系统级方案)logrotate 是 Linux 自带的日志管理工具,稳定、无需改代码。
新建文件:
/etc/logrotate.d/tomcat
内容示例(以 catalina.out 为例):
/opt/tomcat/logs/catalina.out {
daily
rotate 30
missingok
notifempty
compress
copytruncate
}
daily:每天切割rotate 30:保留 30 份compress:压缩旧日志copytruncate:复制后清空原文件(Tomcat 不重启也能用)logrotate -d /etc/logrotate.d/tomcat # 测试
logrotate -f /etc/logrotate.d/tomcat # 强制执行
✅ 优点:简单、安全、生产环境常用
❌ 缺点:不是实时切割
cronolog(老方案,逐步淘汰)yum install cronolog
# 或
apt install cronolog
catalina.sh找到:
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 &
改为:
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
| /usr/sbin/cronolog "$CATALINA_BASE/logs/catalina.%Y-%m-%d.out" &
✅ 按天生成日志
❌ 需要改启动脚本,Tomcat 升级需注意
如果你用的是 Spring Boot / 自定义日志:
<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>30</maxHistory>
</rollingPolicy>
</appender>
✅ 精细控制
❌ 不解决 catalina.out
AsyncFileHandler(有限)Tomcat 8+ 支持:
handlers = 1catalina.org.apache.juli.AsyncFileHandler
但 仍不自动切割 catalina.out
| 日志类型 | 方案 |
|---|---|
| catalina.out | logrotate |
| access log | Tomcat AccessLogValve |
| 业务日志 | Logback |
如果你愿意,可以告诉我:
我可以直接给你一套可直接用的配置。