Tomcat日志切割策略有哪些
导读:Tomcat日志切割策略与选型 一 常见策略总览 Logrotate:Linux 系统自带的日志轮转工具,支持按时间/大小切分、压缩、保留份数、缺失不报错、延迟压缩等,通常通过 /etc/logrotate.d/tomcat 配置,由系统...
Tomcat日志切割策略与选型
一 常见策略总览
- Logrotate:Linux 系统自带的日志轮转工具,支持按时间/大小切分、压缩、保留份数、缺失不报错、延迟压缩等,通常通过 /etc/logrotate.d/tomcat 配置,由系统的 crond 每日任务自动触发,稳定且运维成本低。适合绝大多数生产环境。
- cronolog:按时间管道切分工具,修改 catalina.sh 将标准输出交给 cronolog,生成如 catalina.2025-11-21.out 的文件,天然按天(或自定义周期)分割,配置简单,适合对按时间命名有强需求的场景。
- Shell 脚本 + crontab:无 root 权限或系统未装工具时的折中方案,脚本实现“复制+清空”或按天归档,配合 crontab 定时执行,灵活可控,但需自行处理并发、信号与原子性。
- JULI 按类文件轮转:通过 logging.properties 配置 org.apache.juli.FileHandler 的 maxDays/rotatable 等参数,对 catalina、localhost 等日志按时间或大小轮转,常与系统级轮转配合,减少单文件膨胀风险。
二 策略对比
| 策略 | 核心机制 | 优点 | 局限 | 典型场景 |
|---|---|---|---|---|
| Logrotate | 系统级定时轮转,支持时间/大小触发 | 生态成熟、功能全(压缩、保留、延迟压缩)、运维成本低 | 对 catalina.out 需选 copytruncate 或配合管道 | 生产环境通用 |
| cronolog | 进程管道按时间命名输出 | 按天命名清晰、接入简单 | 需改启动脚本、进程管道异常需守护 | 强需求按日期归档 |
| Shell + crontab | 脚本复制/清空或归档 | 无依赖、灵活 | 需处理并发与原子性、易产生小问题 | 无 root、工具缺失 |
| JULI 轮转 | JDK 日志按类文件轮转 | 与应用日志框架一致、配置直观 | 主要覆盖 JULI 日志,不处理 stdout 的 catalina.out | 与系统轮转组合使用 |
三 关键配置示例
-
Logrotate 示例(按天或达到 16MB 轮转,保留 7 天并压缩)
- 新建配置:/etc/logrotate.d/tomcat
/usr/local/tomcat/logs/catalina.out { daily size 16M rotate 7 missingok compress copytruncate } - 测试与强制执行:
logrotate -d /etc/logrotate.d/tomcat # 语法检查 logrotate -f /etc/logrotate.d/tomcat # 强制执行 - 说明:多数发行版由 /etc/cron.daily/logrotate 每日调用;copytruncate 适用于直接写入 catalina.out 的场景。
- 新建配置:/etc/logrotate.d/tomcat
-
cronolog 示例(按日期生成 catalina.YYYY-MM-DD.out)
- 安装(示例):
yum install -y cronolog(或编译安装) - 修改 bin/catalina.sh,将标准输出管道至 cronolog(示例思路):
org.apache.catalina.startup.Bootstrap "$@" start 2> & 1 \ | /usr/sbin/cronolog "$CATALINA_BASE/logs/catalina.%Y-%m-%d.out" > > /dev/null & - 建议注释或移除
touch "$CATALINA_OUT"以避免与管道写入冲突;重启 Tomcat 生效。
- 安装(示例):
-
Shell 脚本 + crontab 示例(复制并清空 catalina.out,保留 7 天)
- 脚本 /opt/scripts/tomcat-log-rotate.sh:
#!/usr/bin/env bash set -e LOG_DIR=/opt/tomcat/logs cd "$LOG_DIR" TODAY=$(date +%F) OLD=$(date -d '7 days ago' +%F) cp catalina.out "catalina.out.$TODAY" : > catalina.out rm -f "catalina.out.$OLD" - 赋权并加入 crontab(每日 23:59 执行):
59 23 * * * /opt/scripts/tomcat-log-rotate.sh > > /var/log/tomcat-rotate.log 2> & 1 - 说明:该方式简单,但在高并发写入下可能出现少量日志丢失,建议优先使用 Logrotate 或 cronolog。
- 脚本 /opt/scripts/tomcat-log-rotate.sh:
四 选型与落地建议
- 有 root 权限的生产环境优先选用 Logrotate(稳定、可压缩与保留策略完善);对按日期命名有强诉求时选 cronolog;无 root 或工具缺失再用 Shell 脚本。
- 对 catalina.out 这类被外部重定向写入的文件,Logrotate 使用 copytruncate 更稳妥;若使用管道方案(如 cronolog),注意与
touch "$CATALINA_OUT"的冲突处理。 - 将 JULI 按类轮转 与系统级轮转组合:JULI 负责 catalina/localhost 等日志,系统轮转负责 catalina.out 与访问日志,避免单文件无限增长。
- 统一设置保留天数(如 7–30 天)、开启 压缩,并配置 监控与告警(磁盘空间、日志增长速率),在访问量激增时可临时提高日志级别或关闭不必要的访问日志以降低压力。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Tomcat日志切割策略有哪些
本文地址: https://pptw.com/jishu/754008.html
