在 Ubuntu 上 Tomcat 日志轮转(log rotation) 常见有 三种做法,推荐按生产环境选择。
logrotate(✅ 推荐)Tomcat 默认日志通常位于:
/var/log/tomcat9/ # 版本不同可能是 tomcat8 / tomcat10
sudo vim /etc/logrotate.d/tomcat
示例配置(通用、安全):
/var/log/tomcat*/catalina.out {
daily
rotate 7
missingok
notifempty
compress
delaycompress
copytruncate
dateext
dateformat -%Y%m%d
}
如果你还有其他日志:
/var/log/tomcat*/localhost.*
/var/log/tomcat*/manager.*
/var/log/tomcat*/host-manager.* {
daily
rotate 7
missingok
notifempty
compress
delaycompress
copytruncate
}
| 参数 | 作用 |
|---|---|
daily |
每天轮转 |
rotate 7 |
保留 7 份 |
compress |
压缩旧日志 |
copytruncate |
不重启 Tomcat 直接截断日志 ✅ |
dateext |
文件名带日期 |
⚠️ Tomcat 不会自动重新打开 catalina.out,所以 copytruncate 非常重要。
sudo logrotate -d /etc/logrotate.d/tomcat
手动执行一次:
sudo logrotate -f /etc/logrotate.d/tomcat
检查:
ls -lh /var/log/tomcat*/
logging.properties(不太推荐)Tomcat 使用 java.util.logging,但 不支持自动轮转 catalina.out。
修改:
/etc/tomcat9/logging.properties
示例(仅对 catalina.YYYY-MM-DD.log 有效):
1catalina.org.apache.juli.AsyncFileHandler.rotatable = true
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
❌ 缺点
catalina.out如果你使用的是 Spring Boot / 自定义 Tomcat:
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/tomcat/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/tomcat/app.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</configuration>
✅ 优点:
✅ 正确做法:
/dev/null❌ 错误做法:
rm catalina.outecho > catalina.out(可能锁文件)| 方式 | 是否重启 |
|---|---|
| logrotate + copytruncate | ❌ |
| logrotate + reload | ❌ |
| logging.properties | ❌ |
| logback / log4j2 | ❌ |
✅ 标准 Tomcat(apt 安装)
logrotate + copytruncate
✅ Spring Boot / 自定义应用
logback / log4j2
如果你愿意,可以告诉我:
我可以给你 完全贴合你环境的配置。