Ubuntu下配置Tomcat日志轮转(使用logrotate)
logrotate是Ubuntu系统自带的日志管理工具,可自动实现Tomcat日志的轮转、压缩、清理,避免日志文件无限增长占用磁盘空间。以下是详细配置步骤:
Ubuntu系统通常预装logrotate,可通过以下命令确认:
logrotate --version
若未安装,执行以下命令安装:
sudo apt update
sudo apt install logrotate
在/etc/logrotate.d/目录下创建tomcat配置文件(以Tomcat 9为例):
sudo nano /etc/logrotate.d/tomcat9
添加以下内容(根据实际路径调整):
/var/log/tomcat9/*.log {
daily # 每天轮转一次(可选:hourly/weekly/monthly)
missingok # 日志文件丢失时不报错
rotate 7 # 保留最近7个轮转日志
compress # 压缩旧日志(节省空间)
delaycompress # 延迟压缩(当前轮转的日志下次再压缩,避免压缩正在写入的文件)
notifempty # 日志为空时不轮转
create 640 tomcat adm # 创建新日志文件,权限640,属主tomcat,属组adm
sharedscripts # 多个日志文件匹配时,只执行一次postrotate脚本
postrotate
if [ -f /var/run/tomcat9.pid ]; then
/usr/share/tomcat9/bin/shutdown.sh # 重启Tomcat以释放日志文件句柄
sleep 5
/usr/share/tomcat9/bin/startup.sh
fi
endscript
}
参数说明:
daily:轮转频率(可根据需求改为hourly、weekly等);rotate 7:保留7个历史日志文件(超过则删除最旧的);compress:使用gzip压缩旧日志(如catalina.out.1.gz);postrotate/endscript:轮转后执行的命令,用于重启Tomcat(确保日志文件句柄释放,避免写入旧文件)。手动触发轮转以验证配置是否正确:
sudo logrotate -vf /etc/logrotate.d/tomcat9
-v:显示详细执行过程;-f:强制轮转(即使未到轮转时间)。logrotate默认通过系统cron定时任务(/etc/cron.daily/logrotate)每天自动运行。可通过以下命令查看cron任务是否存在:
cat /etc/cron.daily/logrotate
若任务存在,系统会每天自动执行logrotate,无需额外配置。
若Tomcat的catalina.out日志文件未包含在上述配置中(部分Tomcat版本将日志输出到catalina.out而非.log文件),需单独添加配置:
sudo nano /etc/logrotate.d/tomcat_catalina
添加以下内容:
/usr/local/tomcat/logs/catalina.out {
daily
missingok
rotate 7
compress
delaycompress
notifempty
copytruncate # 直接截断原文件,无需重启Tomcat(适用于无法重启的场景)
}
注意:copytruncate会复制原日志文件后清空内容,可能导致少量日志丢失(如复制瞬间写入的日志),建议优先使用postrotate重启Tomcat的方式。
/var/log/tomcat9/目录及日志文件的属主为tomcat(或对应的Tomcat用户),避免logrotate无法访问;/opt/tomcat),需调整配置中的日志路径;daily改为size 100M(当日志达到100MB时轮转)。通过以上步骤,可实现Ubuntu下Tomcat日志的自动轮转,有效管理日志文件大小和数量。