Tomcat日志切割与归档方法
一 常用方案总览
| 方案 | 适用场景 | 关键要点 | 优点 | 注意点 |
|---|---|---|---|---|
| logrotate | 系统自带、统一运维管理 | 对catalina.out使用 copytruncate,按天轮转并压缩归档 | 简单、稳定、与系统日志策略一致 | 需理解 copytruncate 与 create 的差异 |
| cronolog | 希望按时间自动命名输出 | 在 catalina.sh 将 stdout/stderr 通过管道交给 cronolog | 按日生成文件,无需额外轮转工具 | 修改启动脚本,注意路径与权限 |
| Log4j 按天切分 | 应用侧精细控制 | 使用 DailyRollingFileAppender 输出到 catalina、localhost 等 | 灵活、可定制格式与级别 | 需引入 log4j 相关 jar 并调整配置 |
以上三种方式均为业界常用做法,可单独或组合使用(例如:cronolog 负责 catalina.out,Log4j 负责业务日志)。
二 方案一 Logrotate 切割 catalina.out(系统自带,推荐)
/path/to/tomcat/logs/catalina.out {
daily
rotate 30
missingok
dateext
compress
notifempty
copytruncate
}
三 方案二 Cronolog 按时间命名 catalina.out
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
| /usr/local/sbin/cronolog "$CATALINA_BASE/logs/catalina-%Y-%m-%d.out" >> /dev/null &
四 方案三 Log4j 按天切分 Tomcat 内部日志
log4j.rootLogger=INFO, CATALINA
log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=${catalina.base}/logs/catalina
log4j.appender.CATALINA.Append=true
log4j.appender.CATALINA.Encoding=UTF-8
log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.CATALINA.layout=org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern=%d [%t] %-5p %c- %m%n
log4j.appender.LOCALHOST=org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File=${catalina.base}/logs/localhost
log4j.appender.LOCALHOST.Append=true
log4j.appender.LOCALHOST.Encoding=UTF-8
log4j.appender.LOCALHOST.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.LOCALHOST.layout=org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern=%d [%t] %-5p %c- %m%n
# 可按需添加 MANAGER / HOST-MANAGER
五 归档与清理实践
find /path/to/tomcat/logs -type f \( -name "*.log" -o -name "*.gz" \) -mtime +30 -delete
0 0 * * * /usr/bin/find /path/to/tomcat/logs -type f \( -name "*.log" -o -name "*.gz" \) -mtime +30 -delete
tar czvf /backup/tomcat_logs_$(date +%F).tar.gz -C /path/to/tomcat/logs .