Linux Tomcat日志轮转策略是什么
导读:Linux Tomcat日志轮转策略 一 默认行为与局限 Tomcat 默认把标准输出与错误输出重定向到 $CATALINA_HOME/logs/catalina.out,该文件不会自动切割,长期运行会持续增长。内置的 JULI(java...
Linux Tomcat日志轮转策略
一 默认行为与局限
- Tomcat 默认把标准输出与错误输出重定向到 $CATALINA_HOME/logs/catalina.out,该文件不会自动切割,长期运行会持续增长。内置的 JULI(java.util.logging) 按文件大小对部分日志(如 catalina、localhost 等)进行轮转,常见配置为 FileHandler.limit + FileHandler.count,但 catalina.out 不在其管理范围内,仍需外部方案处理。若需更灵活的按天/按大小策略,通常采用系统级工具或改造输出方式。
二 推荐策略 logrotate管理catalina.out
- 思路:使用系统自带的 logrotate 对 catalina.out 执行按天或按大小的切割、压缩与保留,适配绝大多数 Linux 发行版与 Tomcat 部署形态。
- 典型配置(/etc/logrotate.d/tomcat):
关键参数说明:/opt/tomcat/logs/catalina.out { daily rotate 7 size 100M copytruncate compress delaycompress missingok notifempty dateext dateformat -%Y%m%d su tomcat tomcat }- daily / size 100M:按天或当文件达到 100MB 触发轮转(满足任一条件即触发)。
- copytruncate:复制后截断原文件,保证 Tomcat 进程无需重启 且持续写入同一文件句柄。
- compress / delaycompress:归档后压缩,delaycompress 常用于“下次轮转再压缩昨日文件”,便于快速回滚查看。
- missingok / notifempty:文件缺失不报错;空文件不轮转。
- dateext / dateformat -%Y%m%d:归档文件以日期命名,便于检索与清理。
- su tomcat tomcat:以指定系统用户/组执行,避免权限问题。
- 执行与验证:
- 手动测试:
logrotate -d /etc/logrotate.d/tomcat(语法/路径检查),logrotate -f /etc/logrotate.d/tomcat(强制执行一次)。 - 自动执行:系统通常通过 /etc/cron.daily/logrotate 每日运行;部分发行版由 anacron 在 3:22–22:00 区间随机延时执行(如 START_HOURS_RANGE=3-22,RANDOM_DELAY=45),无需额外添加 cron。
- 手动测试:
三 替代与增强方案
- 按日期管道切割 catalina.out(cronolog)
- 安装 cronolog 后,修改 bin/catalina.sh 中标准输出重定向,例如:
org.apache.catalina.startup.Bootstrap "$@" start 2> & 1 \ | /usr/local/cronolog/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out > > /dev/null & - 特点:天然按天生成 catalina.YYYY-MM-DD.out,无需后续压缩与清理脚本,但对运行期日志句柄无侵入式截断需求。
- 安装 cronolog 后,修改 bin/catalina.sh 中标准输出重定向,例如:
- 使用 Log4j 接管并精细控制
- 以 Log4j + Tomcat-Juli 替换默认 JULI,配置 DailyRollingFileAppender / RollingFileAppender 实现按天或按大小滚动,并可配合 maxBackupIndex 控制保留份数;需在 conf/context.xml 设置 swallowOutput=“true” 将 stdout/stderr 纳入日志框架。适合对日志格式、滚动策略、异步输出有更高要求的场景。
四 多实例与历史日志清理
- 多实例统一策略:在 /etc/logrotate.d/ 下为不同实例分别配置,或使用通配路径一次性匹配多个实例日志目录,例如:
/opt/tomcat*/logs/catalina.out { daily rotate 15 copytruncate compress missingok dateext su tomcat tomcat } - 历史文件清理:对按日期命名的归档或访问日志,可用 find … -mtime +N 定期清理,例如保留 7 天:
也可在 logrotate 的 postrotate/endscript 中加入自定义清理命令,实现与轮转动作联动。0 2 * * * find /opt/tomcat*/logs -name 'catalina.out-*-gz' -mtime +7 -delete 0 2 * * * find /opt/tomcat*/logs -name 'localhost_access_log.*.txt' -mtime +7 -delete
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Tomcat日志轮转策略是什么
本文地址: https://pptw.com/jishu/775878.html
