CentOS Tomcat日志存储优化方案
一 目标与总体思路
二 核心方案对比与选型
| 方案 | 原理与改动点 | 优点 | 注意点 |
|---|---|---|---|
| logrotate 轮转 catalina.out | 不改动应用,配置 /etc/logrotate.d/tomcat 对 catalina.out 执行 copytruncate/轮转/压缩/清理 | 系统自带、运维成本低、可集中管理 | copytruncate 存在极小概率丢日志窗口;需确保权限与路径正确 |
| cronolog 按日期管道输出 | 修改 bin/catalina.sh,将 stdout/stderr 通过管道交给 cronolog 生成 catalina.%Y-%m-%d.out | 天然按天切分,文件命名清晰 | 需改动启动脚本;升级 Tomcat 需复核脚本兼容性 |
| Log4j/Log4j2 接管 JUL 与输出 | 使用 log4j-1.2.17 / tomcat-juli / tomcat-juli-adapters 或 Log4j2,在 conf/context.xml 设置 swallowOutput=“true”,以 RollingFile 按天/按大小滚动 | 灵活可控(异步、按天+按大小、保留策略、落盘压缩等) | 版本匹配与配置较复杂,变更需回归验证 |
| 说明:以上三种方案均为业界常用做法,适配 CentOS 7/8/Stream,可按现状与团队能力选择其一或组合使用(如 cronolog 负责控制台输出,Log4j2 负责业务日志)。 |
三 落地配置示例
示例一(推荐稳妥):logrotate 管理 catalina.out
rpm -q logrotate;默认由 /etc/cron.daily/logrotate 每日触发。/etc/logrotate.d/tomcat/opt/tomcat/logs/catalina.out {
copytruncate
daily
rotate 14
compress
delaycompress
missingok
notifempty
size 100M
create 0644 tomcat tomcat
dateext
dateformat -%Y-%m-%d
}
logrotate -d /etc/logrotate.d/tomcatlogrotate -f /etc/logrotate.d/tomcat示例二:cronolog 按日期切分控制台输出
yum install -y cronologif [ -z "$CATALINA_OUT" ]; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out
fi
# touch "$CATALINA_OUT"org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
| /usr/sbin/cronolog "$CATALINA_OUT" >> /dev/null &
示例三(可选进阶):Log4j 接管控制台与内部日志
swallowOutput="true";log4j.rootLogger=INFO, CATALINA
log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=${catalina.base}/logs/catalina.out
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
四 访问日志与日志级别优化
五 运维与风险控制清单
logrotate -d 做语法检查;变更后用 logrotate -f 强制执行一次并观察生成文件;保留回滚方案(脚本与配置备份)。