Tomcat日志过大清理优化方法
logrotate是Linux系统自带的日志管理工具,可自动轮转、压缩、删除旧日志,避免单个文件过大。配置步骤如下:
sudo apt-get install logrotate
(Ubuntu/Debian)或sudo yum install logrotate
(CentOS/RHEL)。sudo nano /etc/logrotate.d/tomcat
,添加以下内容(按需调整参数):/usr/local/tomcat/logs/catalina.out {
daily # 每天轮转
rotate 7 # 保留最近7天日志
compress # 压缩旧日志(节省空间)
missingok # 若日志不存在也不报错
notifempty # 若日志为空则不轮转
copytruncate # 复制原日志后清空,避免重启Tomcat
}
sudo logrotate -d /etc/logrotate.d/tomcat
(模拟运行,不实际执行);手动触发轮转:sudo logrotate /etc/logrotate.d/tomcat
。通过修改Tomcat的conf/logging.properties
文件,设置日志文件的大小限制和滚动策略,适用于catalina、localhost等日志:
1catalina.org.apache.juli.FileHandler
),修改以下参数:1catalina.org.apache.juli.FileHandler.level = INFO # 设置日志级别(减少DEBUG/TRACE输出)
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs # 日志目录
1catalina.org.apache.juli.FileHandler.prefix = catalina. # 日志前缀
1catalina.org.apache.juli.FileHandler.maxFileSize = 10MB # 单个日志文件最大大小
1catalina.org.apache.juli.FileHandler.maxDays = 30 # 保留最近30天日志
cronolog可根据时间(如日期)实时切割日志文件,避免单个文件无限增长,适合高流量场景:
sudo apt-get install cronolog
(Ubuntu/Debian)或sudo yum install cronolog
(CentOS/RHEL)。bin/catalina.sh
),找到CATALINA_OUT
变量设置,替换为:if [ -z "$CATALINA_OUT" ]; then
CATALINA_OUT="$CATALINA_BASE/logs/catalina.%Y-%m-%d.out" # 按日期命名日志文件
fi
catalina.2025-10-09.out
、catalina.2025-10-10.out
等形式。通过脚本批量删除过期日志,配合cron定时任务实现自动化:
/usr/local/tomcat/bin/clear_tomcat_logs.sh
),内容如下:#!/bin/bash
LOG_PATH="/usr/local/tomcat/logs"
# 删除7天前的.log和.txt文件
find "$LOG_PATH" -type f -name "*.log" -mtime +7 -exec rm -f {} \;
find "$LOG_PATH" -type f -name "*.txt" -mtime +7 -exec rm -f {} \;
# 清空catalina.out(保留文件但清空内容)
echo "" > "$LOG_PATH/catalina.out"
sudo chmod +x /usr/local/tomcat/bin/clear_tomcat_logs.sh
。crontab -e
,添加以下内容:0 1 * * * /usr/local/tomcat/bin/clear_tomcat_logs.sh
过高的日志级别(如DEBUG)会生成大量无用日志,需调整为更严格的级别:
conf/logging.properties
文件,调整根日志级别(如INFO
或WARN
):org.apache.catalina.level = INFO # Tomcat核心日志
com.example.app.level = WARN # 应用层日志(替换为你的包名)
conf/server.xml
,注释掉AccessLogValve
配置:<!--
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
-->
logging.properties
将其级别设为ERROR
或OFF
。Tomcat默认使用Java Util Logging(JULI),功能有限,可替换为Log4j或Logback,支持更灵活的日志管理(如按大小/日期分割、远程日志传输):
log4j-1.2.17.jar
)和适配器(tomcat-juli-adapters.jar
),放入lib
目录。conf/logging.properties
文件。conf/context.xml
中添加swallowOutput="true"
:<Context swallowOutput="true">
conf/log4j.properties
文件,配置滚动策略(示例):log4j.rootLogger=INFO, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${catalina.base}/logs/tomcat.log
log4j.appender.file.MaxFileSize=100MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n