定期清理Tomcat日志的常用方法
logrotate是Linux系统自带的日志管理工具,可自动实现日志轮转、压缩、删除旧日志,无需额外安装软件(部分系统需手动安装)。
sudo nano /etc/logrotate.d/tomcat。/path/to/tomcat/logs/catalina.out {
daily # 每天轮转一次
rotate 7 # 保留最近7天的日志
compress # 轮转后压缩(节省空间)
missingok # 日志文件丢失时不报错
notifempty # 日志为空时不轮转
copytruncate # 截断原日志文件(避免重启Tomcat)
}
sudo logrotate -d /etc/logrotate.d/tomcat(模拟运行,无实际删除)。sudo logrotate -f /etc/logrotate.d/tomcat(验证配置是否正确)。/etc/cron.daily/logrotate),无需额外设置定时任务。通过自定义脚本定期删除旧日志,配合系统cron定时执行,适合需要更复杂清理逻辑的场景。
/usr/local/bin/clean_tomcat_logs.sh):#!/bin/bash
LOG_DIR="/path/to/tomcat/logs" # 替换为实际Tomcat日志路径
# 删除7天前的.catalina.*.log、.localhost.*.log和access log文件
find "$LOG_DIR" -type f -name "catalina.*.log" -mtime +7 -exec rm -rf {} \;
find "$LOG_DIR" -type f -name "localhost.*.log" -mtime +7 -exec rm -rf {} \;
find "$LOG_DIR" -type f -name "localhost_access_log.*.txt" -mtime +7 -exec rm -rf {} \;
# 清空catalina.out文件(避免日志无限增长)
echo "" > "$LOG_DIR/catalina.out"
sudo chmod +x /usr/local/bin/clean_tomcat_logs.sh(使脚本可执行)。crontab -e,添加以下内容(每天凌晨0点执行):0 0 * * * /usr/local/bin/clean_tomcat_logs.sh
保存后,cron会自动按计划执行脚本。通过修改Tomcat的日志配置文件,实现日志自动滚动(按大小或时间分割),避免单个日志文件过大。
conf/logging.properties(针对Java Util Logging):1catalina.org.apache.juli.AsyncFileHandler配置项,添加或修改以下参数:1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.suffix = .log
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 30 # 保留30天日志
1catalina.org.apache.juli.AsyncFileHandler.maxFileSize = 10MB # 单个文件最大10MB
conf/context.xml(针对应用日志):swallowOutput="true",将应用输出重定向到Tomcat日志系统:<Context swallowOutput="true">
此配置可避免应用日志直接写入catalina.out,便于集中管理。catalina.out:catalina.out是Tomcat的标准输出日志,包含启动、运行时的重要信息,清空前需确认无需保留近期内容。logrotate -d或手动运行脚本)验证,避免配置错误导致日志未正确清理。