CentOS 下 Tomcat 日志管理策略
一 日志分类与存放路径
二 查看与检索
tail -f catalina.out;按 Ctrl+C 退出。sed -n "/2023-10-01/,/2023-10-02/p" catalina.out > /tmp/tomcat_logs.txt。tail -f catalina.out | grep error。journalctl -u tomcat 查看服务层面的启动、停止与守护进程日志。三 轮转与清理
| 方案 | 适用场景 | 核心做法 | 优点 | 注意点 |
|---|---|---|---|---|
| logrotate 轮转 catalina.out | 沿用默认输出到控制台,需对 catalina.out 做按天/按大小切割与压缩 | 在 /etc/logrotate.d/tomcat 创建配置,使用 copytruncate 或配合 postrotate 触发 Tomcat 重新打开日志 | 系统自带、运维成本低、易统一合规 | 选择 copytruncate 简单,但存在极短的日志丢失窗口;用 postrotate 需确保 Tomcat 能安全重开日志 |
| cronolog 管道切割 | 希望由进程直接按时间命名输出 | 安装 cronolog,修改 bin/catalina.sh,将标准输出通过管道交给 cronolog 生成 catalina-%Y-%m-%d.out | 按时间精准切割、无额外轮转依赖 | 需改动启动脚本,升级 Tomcat 时注意变更同步 |
| Log4j 接管 JULI | 需要更灵活的 Appender、按天/按大小滚动、结构化输出 | 放置 log4j-1.2.17.jar、tomcat-juli.jar、tomcat-juli-adapters.jar,在 conf/context.xml 设置 swallowOutput=“true”,提供 log4j.properties | 功能强、可对接企业日志平台 | 版本匹配重要,变更后需充分回归测试 |
/opt/tomcat/logs/catalina.out {
daily
rotate 7
compress
missingok
notifempty
copytruncate
size 100M
dateext
}
手动测试:logrotate -d /etc/logrotate.d/tomcat(干跑),logrotate -f /etc/logrotate.d/tomcat(强制执行)。如以服务运行且使用 postrotate,可在 postrotate 中执行 Tomcat 的日志重开或通知命令(如 kill -USR1 或 systemd 友好信号),确保应用继续写入新文件。四 访问日志与运行日志配置要点
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log."
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
pattern=${catalina.base}/logs/catalina.%g.out; limit=10485760; count=5),适合对单个日志文件大小有严格要求的场景。五 集中化与容量规划