Ubuntu Tomcat日志清理的最佳实践是什么
使用Logrotate实现自动化日志轮转与压缩
Logrotate是Ubuntu系统自带的日志管理工具,可自动处理Tomcat日志的轮转、压缩、删除及权限维护,避免手动操作的繁琐与风险。需创建或编辑/etc/logrotate.d/tomcat配置文件,针对Tomcat主要日志文件(如catalina.out、访问日志)设置参数:
/var/log/tomcat/catalina.out {
daily # 每天轮转一次(可根据磁盘空间调整,如weekly/monthly)
rotate 7 # 保留最近7天的日志文件
compress # 使用gzip压缩旧日志(节省空间)
missingok # 若日志文件不存在,不报错继续执行
notifempty # 若日志文件为空,不进行轮转
copytruncate # 先复制原日志内容,再清空原文件(避免重启Tomcat)
create 640 tomcat tomcat # 创建新日志文件,权限640,所有者为tomcat用户(需提前创建)
sharedscripts # 所有日志轮转完成后统一执行postrotate脚本
postrotate
/bin/kill -USR1 $(cat /var/run/tomcat.pid) 2>
/dev/null || true # 向Tomcat进程发送USR1信号,使其重新打开日志文件(避免日志丢失)
endscript
}
配置完成后,Logrotate会随系统cron任务(通常每日执行)自动运行。可通过logrotate -d /etc/logrotate.d/tomcat测试配置语法,或logrotate -f /etc/logrotate.d/tomcat强制立即执行。
配置Tomcat内置日志轮转(可选补充)
若不想依赖外部工具,可通过修改Tomcat的conf/logging.properties文件,使用java.util.logging.FileHandler实现日志轮转。关键配置项如下:
# 控制台日志轮转(可选)
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
# 文件日志轮转(针对特定日志,如catalina)
handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
1catalina.org.apache.juli.FileHandler.level = INFO
1catalina.org.apache.juli.FileHandler.directory = ${
catalina.base}
/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
1catalina.org.apache.juli.FileHandler.limit = 10485760 # 单个日志文件最大10MB(10*1024*1024字节)
1catalina.org.apache.juli.FileHandler.count = 5 # 保留5个备份文件
1catalina.org.apache.juli.FileHandler.formatter = java.util.logging.SimpleFormatter
修改后需重启Tomcat使配置生效。此方法适合需要更细粒度控制的场景,但灵活性不如Logrotate。
定期清理过期日志脚本(辅助手段)
对于无法通过轮转工具覆盖的日志(如localhost_access_log.*.txt、manager.log),可编写Shell脚本定期删除过期文件(如7天以上)。示例脚本:
#!/bin/bash
LOG_PATH="/var/log/tomcat" # Tomcat日志目录(根据实际路径修改)
find "$LOG_PATH" -name "catalina.*.log" -mtime +7 -exec rm -f {
}
\;
# 删除7天前的catalina日志
find "$LOG_PATH" -name "localhost_access_log.*.txt" -mtime +7 -exec rm -f {
}
\;
# 删除7天前的访问日志
find "$LOG_PATH" -name "manager.*.log" -mtime +7 -exec rm -f {
}
\;
# 删除7天前的manager日志
find "$LOG_PATH" -name "*.gz" -mtime +30 -exec rm -f {
}
\;
# 删除30天前的压缩日志
echo "$(date '+%Y-%m-%d %H:%M:%S') - Logs cleanup completed." >
>
"$LOG_PATH/cleanup.log" # 记录清理操作
赋予脚本执行权限(chmod +x /path/to/clear_tomcat_logs.sh),并通过crontab -e设置定时任务(如每日23:59执行):
59 23 * * * /path/to/clear_tomcat_logs.sh
此方法作为补充,可清理Logrotate未覆盖的特殊日志。
调整日志级别减少不必要的输出
过高的日志级别(如FINE、FINER)会产生大量无用日志,增加磁盘占用。可通过修改conf/logging.properties文件调整日志级别,推荐设置为INFO或WARNING:
# 全局日志级别(默认为INFO)
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = java.util.logging.ConsoleHandler
# 控制台处理器级别(与全局一致)
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
调整后重启Tomcat,可减少不必要的日志输出。
注意事项
- 备份重要日志:清理前建议备份包含关键错误信息的日志(如
catalina.out),可使用tar czvf tomcat_logs_backup_$(date +%F).tar.gz /var/log/tomcat/命令。 - 权限管理:确保日志目录及文件的权限正确(如
tomcat:tomcat),避免其他用户误删或修改。 - 监控磁盘空间:通过
df -h命令定期检查磁盘使用情况,若磁盘空间不足,及时调整Logrotate的rotate值或清理频率。 - 避免误删:使用
rm -f而非rm -rf删除文件,防止误删系统文件。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Tomcat日志清理的最佳实践是什么
本文地址: https://pptw.com/jishu/732637.html
