如何关闭Tomcat 8.5的所有日志轮转以兼容logrotate
解决Tomcat 8.5自带日志轮转与logrotate冲突的问题
我来帮你搞定这个日志轮转冲突的问题!Tomcat的日志分成两类管理,你已经找到了自定义访问日志的关闭方法,剩下的几个系统日志确实需要通过logging.properties来调整,具体操作如下:
1. 确认自定义访问日志的轮转已关闭
你提到的mysite_access日志是在server.xml里的<AccessLog>配置的,确保给这个标签加上rotatable="false"属性,这样它就不会自动生成带日期后缀的文件,保持固定文件名让logrotate处理:
<AccessLog className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="mysite_access" suffix=".log" pattern="%h %l %u %t "%r" %s %b" rotatable="false"/> <!-- 关键配置 -->
2. 关闭JUL管理的系统日志轮转
catalina、localhost、manager、host-manager这些日志是由Tomcat基于Java Util Logging(JUL)扩展的org.apache.juli.FileHandler管理的,默认会自动轮转。要关闭它们的自带轮转,需要修改Tomcat安装目录/conf/logging.properties文件,给每个对应日志的Handler添加rotatable=false配置:
找到文件里类似下面的Handler配置块,逐个添加rotatable=false:
# Catalina日志Handler 1catalina.org.apache.juli.FileHandler.level = FINE 1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.FileHandler.prefix = catalina. 1catalina.org.apache.juli.FileHandler.rotatable = false <!-- 新增这行 --> # Localhost日志Handler 2localhost.org.apache.juli.FileHandler.level = FINE 2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 2localhost.org.apache.juli.FileHandler.prefix = localhost. 2localhost.org.apache.juli.FileHandler.rotatable = false <!-- 新增这行 --> # Manager日志Handler 3manager.org.apache.juli.FileHandler.level = FINE 3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 3manager.org.apache.juli.FileHandler.prefix = manager. 3manager.org.apache.juli.FileHandler.rotatable = false <!-- 新增这行 --> # Host-Manager日志Handler 4host-manager.org.apache.juli.FileHandler.level = FINE 4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 4host-manager.org.apache.juli.FileHandler.prefix = host-manager. 4host-manager.org.apache.juli.FileHandler.rotatable = false <!-- 新增这行 -->
修改完后重启Tomcat,这些日志就会停止生成带日期的后缀文件,保持catalina.log、localhost.log这样的固定文件名。
3. 配置logrotate规则处理Tomcat日志
最后给Tomcat配置logrotate规则,比如创建/etc/logrotate.d/tomcat8.5文件,内容示例如下(根据你的实际路径和用户组调整):
/opt/tomcat/logs/*.log { daily # 每日轮转 rotate 7 # 保留最近7天的日志 compress # 压缩旧日志 missingok # 日志文件不存在时不报错 notifempty # 空文件不轮转 create 640 tomcat tomcat # 轮转后创建新文件的权限和所属用户组 postrotate # 向Tomcat进程发送USR1信号,让它重新打开日志文件,避免丢失日志 PID=$(cat /opt/tomcat/tomcat.pid) kill -USR1 $PID endscript }
注意事项
- 修改配置前记得备份原文件(
server.xml和logging.properties),防止配置出错。 - 确认Tomcat的
tomcat.pid文件路径正确,如果你的Tomcat没有自动生成pid文件,可以在启动脚本里添加-Dcatalina.pid=/opt/tomcat/tomcat.pid参数。
内容的提问来源于stack exchange,提问作者codebox
相关产品推荐
相关产品推荐

