在 Tomcat 中,**日志轮转(Log Rotation)**通常不是由 Tomcat 自身直接完成的,而是依赖底层日志框架(如 java.util.logging、log4j、logback)或操作系统工具(如 logrotate)。下面分几种常见方式说明。
java.util.logging)Tomcat 默认使用 JULI(Java Util Logging Implementation)。
$TOMCAT_HOME/conf/logging.properties
Tomcat 的 JULI 支持 AsyncFileHandler 和 FileHandler,但默认不支持按大小切割,通常是按天生成日志。
示例(按天):
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
1catalina.org.apache.juli.FileHandler.rotatable = true
rotatable=true表示按天轮转(catalina.2026-01-15.log)
⚠️ JULI 不支持“超过 100MB 就切割”,需要换方案。
这是生产环境最常用、最稳定的方式。
/etc/logrotate.d/tomcat
/opt/tomcat/logs/catalina.out {
daily
rotate 30
missingok
notifempty
compress
delaycompress
copytruncate
}
daily:每天轮转rotate 30:保留 30 份compress:压缩旧日志copytruncate:不重启 Tomcat 直接截断日志(关键)✅ 适合 catalina.out
如果你在 Web 应用中使用了 Log4j2 或 Logback:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<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>
✅ 支持:
Access Log 由 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"
rotatable="true"
fileDateFormat="yyyy-MM-dd" />
rotatable=true ✅fileDateFormat 控制粒度(天 / 小时)| 场景 | 推荐方式 |
|---|---|
| catalina.out | logrotate + copytruncate |
| 应用日志 | Logback / Log4j2 |
| access log | Tomcat 自带 rotatable |
| 简单按天 | JULI |
如果你能告诉我:
我可以给你精确配置文件。