温馨提示×

如何定期清理Tomcat日志

小樊
57
2025-10-05 22:27:33
栏目: 智能运维

定期清理Tomcat日志的常用方法

1. 使用logrotate工具(推荐,适用于Linux系统)

logrotate是Linux系统自带的日志管理工具,可自动实现日志轮转、压缩、删除旧日志,无需额外安装软件(部分系统需手动安装)。

  • 配置步骤
    1. 创建或编辑Tomcat专属配置文件:sudo nano /etc/logrotate.d/tomcat
    2. 添加以下配置(根据实际路径调整):
      /path/to/tomcat/logs/catalina.out {
          daily                # 每天轮转一次
          rotate 7             # 保留最近7天的日志
          compress             # 轮转后压缩(节省空间)
          missingok            # 日志文件丢失时不报错
          notifempty           # 日志为空时不轮转
          copytruncate         # 截断原日志文件(避免重启Tomcat)
      }
      
    3. 测试配置有效性:sudo logrotate -d /etc/logrotate.d/tomcat(模拟运行,无实际删除)。
    4. 强制立即执行:sudo logrotate -f /etc/logrotate.d/tomcat(验证配置是否正确)。
    5. logrotate默认通过系统cron每日自动运行(路径:/etc/cron.daily/logrotate),无需额外设置定时任务。

2. 编写Shell脚本+定时任务(灵活,适用于所有系统)

通过自定义脚本定期删除旧日志,配合系统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会自动按计划执行脚本。

3. 调整Tomcat日志配置(从源头控制日志增长)

通过修改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.outcatalina.out是Tomcat的标准输出日志,包含启动、运行时的重要信息,清空前需确认无需保留近期内容。
  • 测试配置有效性:无论是logrotate还是脚本,修改后均需通过测试命令(如logrotate -d或手动运行脚本)验证,避免配置错误导致日志未正确清理。

0