You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免Tomcat重启时覆盖catalina.out日志文件?

Tomcat 8.5 catalina.out重启覆盖问题解决及logrotate疑问解答

一、让catalina.out启动时追加而非覆盖的配置方法

Tomcat默认启动脚本采用覆盖模式输出日志,修改catalina.sh即可实现追加:

  1. 打开$CATALINA_HOME/bin/catalina.sh,找到守护进程启动的命令段(一般在start分支下,包含nohup的代码块)。
    原命令中的日志重定向为> "$CATALINA_OUT" 2>&1,将其中的>替换为>>,修改后如下:

    >> "$CATALINA_OUT" 2>&1 < /dev/null &
    

    这样每次启动Tomcat,日志会追加到现有文件末尾,不会覆盖历史内容。

  2. 如果你的配置中单独指定了catalina.err输出,找到对应的重定向部分,同样将>替换为>>即可。

注意:修改前请先备份catalina.sh,避免配置错误导致Tomcat无法启动。

二、关于logrotate的疑问

你的理解完全正确:如果在shutdown.sh中手动调用logrotate,确实会打破原有轮转规则,导致旧日志无法被自动清理。logrotate严格按照配置文件中的文件名匹配规则处理日志,临时触发轮转生成的不符合规则的文件,后续清理任务会直接忽略,长期下来会造成无用日志堆积。

既然已经配置了每周自动轮转catalina.out,再结合前面修改的日志追加配置,完全不需要在关机时手动调用logrotate——重启后日志会继续写入现有文件,等下一次logrotate触发时,旧日志会被正常归档、清理,全程无需手动干预。

额外说明

你提到的“应用独立日志”确实是更规范的方案,但对于无法获取源码的第三方应用,修改Tomcat启动脚本的重定向方式是最直接的解决办法,既能保留历史日志用于排查问题,又无需改动应用代码。

内容的提问来源于stack exchange,提问作者Adri C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 05:33:23