使用logrotate实现Tomcat日志自动轮转与压缩(推荐)
logrotate是Debian系统自带的日志管理工具,可自动完成日志切割、压缩、删除等操作,无需手动干预,是管理Tomcat日志的首选方案。
sudo apt-get update && sudo apt-get install logrotate
/etc/logrotate.d/目录下创建tomcat配置文件(如tomcat),添加以下内容(以catalina.out为例,可根据实际路径调整):/usr/local/tomcat/logs/catalina.out {
daily # 每天轮转一次(可改为weekly/monthly)
rotate 7 # 保留最近7个旧日志文件
compress # 使用gzip压缩旧日志(如catalina.out.1.gz)
delaycompress # 延迟压缩(当前轮转的日志在下一次轮转时再压缩,避免压缩正在写入的文件)
missingok # 日志文件不存在时不报错
notifempty # 日志文件为空时不轮转
copytruncate # 复制原日志文件后清空,避免重启Tomcat(适用于无法修改Tomcat配置的场景)
}
sudo logrotate -d /etc/logrotate.d/tomcat
sudo logrotate -f /etc/logrotate.d/tomcat
配置完成后,logrotate会根据daily参数每天自动执行轮转,旧日志会被压缩存储(如catalina.out.1.gz),保留7天后自动删除,有效控制日志文件大小。使用cronolog实现日志按日期切割(替代方案)
cronolog是一款日志切割工具,可将日志按日期分割成独立文件(如catalina.2025-09-27.out),减少单个日志文件的大小,但需配合Tomcat配置使用。
sudo apt-get install cronolog
/usr/local/tomcat/bin/catalina.sh文件,找到org.apache.catalina.startup.Bootstrap启动命令,将日志输出重定向至cronolog:# 原始行(需注释或删除):
# org.apache.catalina.startup.Bootstrap "$@" start 2>&1 &
# 修改为(将日志按日期分割):
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/sbin/cronolog "$CATALINA_BASE/logs/catalina.%Y-%m-%d.out" >> /dev/null &
sudo systemctl restart tomcat
配置完成后,Tomcat会将日志按日期分割存储(如catalina.2025-09-27.out),避免单个catalina.out文件过大。需注意,cronolog仅切割当天日志,旧日志仍需手动或通过定时任务删除(如结合find命令)。补充:手动清理与定时任务
若无法使用上述工具,可通过手动脚本定期清理旧日志:
/usr/local/tomcat/bin/目录下创建clear_tomcat_logs.sh,添加以下内容(删除30天前的.log和.out文件):#!/bin/bash
LOG_DIR="/usr/local/tomcat/logs"
find "$LOG_DIR" -mtime +30 -name "*.log" -exec rm -rf {} \;
find "$LOG_DIR" -mtime +30 -name "*.out" -exec rm -rf {} \;
sudo chmod +x /usr/local/tomcat/bin/clear_tomcat_logs.sh
crontab -e添加以下内容(每天凌晨1点执行清理):0 1 * * * /usr/local/tomcat/bin/clear_tomcat_logs.sh
手动清理适用于临时解决日志过大问题,但不建议替代自动管理工具(如logrotate),因手动操作易遗漏。