在 Debian 上做 Tomcat 日志切割,常见有几种方案,从“最简单”到“最规范”给你列一下,你可以按需求选。
Debian 自带 logrotate,非常适合 Tomcat。
新建文件:
/etc/logrotate.d/tomcat
内容示例(假设 Tomcat 在 /opt/tomcat,日志在 logs/):
/opt/tomcat/logs/catalina.out {
daily
missingok
rotate 14
compress
delaycompress
copytruncate
notifempty
}
/opt/tomcat/logs/*.log {
daily
missingok
rotate 14
compress
delaycompress
copytruncate
notifempty
}
copytruncate:关键,Tomcat 不会重新打开日志文件,直接截断最安全compress:自动 gziprotate 14:保留 14 天logrotate -d /etc/logrotate.d/tomcat
logrotate -f /etc/logrotate.d/tomcat
✅ 生产环境最常用方案
Tomcat 默认用 java.util.logging。
/opt/tomcat/conf/logging.properties
示例:
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
但 JULI 原生不支持按大小/时间自动切割(除非写 Handler)。
❌ 不推荐用于 catalina.out
如果你控制 Web 应用代码:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/opt/tomcat/logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/opt/tomcat/logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>14</maxHistory>
</rollingPolicy>
</appender>
✅ 适合 业务日志
❌ 不影响 catalina.out
apt install cronolog
修改 catalina.sh:
CATALINA_OUT="$CATALINA_BASE/logs/catalina.%Y-%m-%d.out"
并用:
| cronolog $CATALINA_OUT &
⚠️ 已逐渐淘汰
| 场景 | 推荐方案 |
|---|---|
| catalina.out | ✅ logrotate |
| 业务日志 | Logback / Log4j2 |
| 简单系统 | logrotate |
| 老系统 | cronolog(不推荐) |
如果你愿意,可以告诉我:
catalina.out我可以直接给你一份 可复制的配置文件。