温馨提示×

如何清理Debian Tomcat的旧日志文件

小樊
45
2025-09-18 19:25:55
栏目: 智能运维

1. 手动清理旧日志文件(临时解决磁盘空间问题)
首先定位Tomcat日志目录(默认路径通常为/var/log/tomcat//opt/tomcat/logs/,可通过sudo find / -name "catalina.out"sudo find / -name "localhost.*.log"确认)。使用find命令删除指定时间前的旧日志(如30天前):

# 删除30天前的.log和.txt日志文件
find /path/to/tomcat/logs/ -type f -name "*.log" -mtime +30 -exec rm -rf {} \;
find /path/to/tomcat/logs/ -type f -name "*.txt" -mtime +30 -exec rm -rf {} \;
# 特别处理catalina.out(Tomcat主日志文件,需单独清空而非删除)
sudo truncate -s 0 /path/to/tomcat/logs/catalina.out  # 清空内容(保留文件)
# 或备份后删除(需停止Tomcat服务)
sudo systemctl stop tomcat
sudo mv /path/to/tomcat/logs/catalina.out /path/to/tomcat/logs/catalina.out.bak
sudo touch /path/to/tomcat/logs/catalina.out  # 创建新文件
sudo systemctl start tomcat

注意:手动清理前建议备份重要日志(如cp catalina.out ~/catalina_backup_$(date +%F).out),避免误删。

2. 使用Shell脚本自动化清理(减少重复操作)
创建Shell脚本(如/usr/local/bin/clean_tomcat_logs.sh),添加以下内容(替换为实际日志路径):

#!/bin/bash
LOG_PATH="/path/to/tomcat/logs"
# 删除30天前的.log、.txt和access log文件
find "$LOG_PATH" -type f -name "*.log" -mtime +30 -exec rm -rf {} \;
find "$LOG_PATH" -type f -name "*.txt" -mtime +30 -exec rm -rf {} \;
find "$LOG_PATH" -type f -name "localhost_access_log.*.txt" -mtime +30 -exec rm -rf {} \;
# 清空catalina.out(避免文件过大)
truncate -s 0 "$LOG_PATH/catalina.out"
echo "$(date '+%F %T') - Tomcat logs cleaned up." >> "$LOG_PATH/cleanup.log"  # 记录清理日志

赋予脚本执行权限:

sudo chmod +x /usr/local/bin/clean_tomcat_logs.sh

优势:脚本可扩展(如添加邮件通知),适合定期执行。

3. 配置logrotate工具(推荐:自动化轮转与压缩)
logrotate是Linux系统自带的日志管理工具,可自动轮转、压缩、删除旧日志。

  • 创建Tomcat专用配置文件(/etc/logrotate.d/tomcat),添加以下内容(替换为实际路径):
    /path/to/tomcat/logs/catalina.out {
        daily          # 每天轮转
        rotate 7       # 保留7天日志
        compress       # 压缩旧日志(如catalina.out.1.gz)
        missingok      # 日志不存在时不报错
        notifempty     # 日志为空时不轮转
        copytruncate   # 复制原日志后清空(避免重启Tomcat)
    }
    /path/to/tomcat/logs/*.log {
        daily
        rotate 14
        compress
        missingok
        notifempty
    }
    /path/to/tomcat/logs/*.txt {
        daily
        rotate 30
        compress
        missingok
        notifempty
    }
    
  • 测试配置是否正确(模拟执行):
    sudo logrotate -vf /etc/logrotate.d/tomcat
    

优势:无需手动干预,支持压缩归档,节省磁盘空间。

4. 调整Tomcat日志配置(从源头控制日志增长)
通过修改Tomcat配置文件,限制日志文件大小和保留天数:

  • 修改conf/logging.properties(针对Java Util Logging):
    找到1catalina.org.apache.juli.FileHandler等处理器,添加maxDays参数(保留天数):
    1catalina.org.apache.juli.FileHandler.level = FINE
    1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
    1catalina.org.apache.juli.FileHandler.prefix = catalina.
    1catalina.org.apache.juli.FileHandler.maxDays = 14  # 保留14天
    
  • 修改conf/server.xml(针对Access Log):
    <Host>标签内找到AccessLogValve,添加maxDays属性:
    <Valve className="org.apache.catalina.valves.AccessLogValve"
           directory="${catalina.base}/logs"
           prefix="localhost_access_log."
           suffix=".txt"
           pattern="%h %l %u %t "%r" %s %b"
           maxDays="7" />  # 保留7天
    

优势:从日志生成源头控制大小和保留时间,减少后续清理工作量。

注意事项

  • 清理前备份重要日志(如涉及故障排查),避免数据丢失。
  • 避免过度清理(如保留至少7天日志),便于后续问题分析。
  • 对于生产环境,优先使用logrotate(自动化程度高),结合Shell脚本补充特殊日志(如catalina.out)的清理。
  • 若日志量极大,可考虑使用Log4j替代Java Util Logging(提供更灵活的滚动策略,如按天分割),但需额外配置。

0