温馨提示×

Ubuntu Tomcat日志清理策略

小樊
46
2025-09-20 13:22:43
栏目: 智能运维

Ubuntu Tomcat日志清理策略

1. 使用Logrotate工具(推荐)

Logrotate是Linux系统原生日志管理工具,可自动实现日志轮转、压缩、删除旧日志,无需手动干预,是Tomcat日志清理的首选方案。

  • 安装Logrotate:Ubuntu系统通常预装该工具,未安装时可通过sudo apt-get install logrotate命令安装。
  • 配置Logrotate:在/etc/logrotate.d/目录下创建tomcat配置文件(如sudo nano /etc/logrotate.d/tomcat),添加以下内容(根据实际路径调整):
    /var/log/tomcat/catalina.out {
        daily                # 每天轮转一次
        rotate 7             # 保留最近7天的日志
        compress             # 压缩旧日志(节省空间)
        missingok            # 日志文件丢失时不报错
        notifempty           # 日志为空时不轮转
        copytruncate         # 复制原日志后清空,避免重启Tomcat
    }
    
  • 测试与自动执行:手动测试配置是否正确(sudo logrotate -d /etc/logrotate.d/tomcat),若无错误可强制运行(sudo logrotate -f /etc/logrotate.d/tomcat)。Logrotate默认通过系统cron每日自动执行,无需额外配置。

2. 编写Shell脚本自动化清理

通过脚本定期删除旧日志文件,适合需要自定义清理逻辑的场景(如保留特定天数、清理特定文件类型)。

  • 创建清理脚本:新建clear_tomcat_logs.sh,内容如下(替换/path/to/tomcat/logs为实际路径):
    #!/bin/bash
    LOG_DIR="/path/to/tomcat/logs"
    KEEP_DAYS=7  # 保留7天日志
    echo "$(date '+%F %T') 开始清理Tomcat日志..." >> /var/log/clean_tomcat.log
    find "$LOG_DIR" -type f -name "*.log" -mtime +$KEEP_DAYS -exec rm -f {} \;  # 删除7天前的.log文件
    echo "" > "$LOG_DIR/catalina.out"  # 清空catalina.out
    echo "$(date '+%F %T') 日志清理完成" >> /var/log/clean_tomcat.log
    
  • 设置定时任务:通过crontab -e添加以下内容,设置每天凌晨2点执行脚本:
    0 2 * * * /path/to/clear_tomcat_logs.sh
    
    脚本会将清理记录输出到/var/log/clean_tomcat.log,便于后续审计。

3. 调整Tomcat自身日志配置

通过修改Tomcat配置文件,控制日志输出级别和文件大小,从源头上减少日志生成量。

  • 修改logging.properties:编辑conf/logging.properties,调整日志级别(如将INFO改为WARNING,减少不必要的信息)和文件保留天数:
    handlers = 1catalina.org.apache.juli.AsyncFileHandler
    .handlers = 1catalina.org.apache.juli.AsyncFileHandler
    1catalina.org.apache.juli.AsyncFileHandler.level = WARNING  # 设置日志级别
    1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
    1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
    1catalina.org.apache.juli.AsyncFileHandler.maxDays = 7        # 保留7天日志
    
  • 修改server.xml(可选):若不需要Access日志,可注释AccessLogValve配置(位于conf/server.xml中),避免生成access_log文件:
    <!-- 
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log" suffix=".txt"
           pattern="%h %l %u %t "%r" %s %b" />
    -->
    
    这些配置可减少日志文件的数量和大小,降低磁盘占用。

4. 使用Log4j等第三方日志框架

Log4j提供更灵活的日志管理功能(如按大小分割、集中存储、异步记录),适合需要高级日志管理的场景。

  • 安装Log4j:下载log4j-1.2.17.jartomcat-juli.jar,放入Tomcat的lib目录。
  • 配置Log4j:在conf目录下创建log4j.properties,添加以下内容(示例为按天分割、保留10个备份):
    log4j.rootLogger=INFO, CATALINA
    log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.CATALINA.File=/path/to/tomcat/logs/catalina.log
    log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd
    log4j.appender.CATALINA.MaxFileSize=10MB
    log4j.appender.CATALINA.MaxBackupIndex=10
    log4j.appender.CATALINA.layout=org.apache.log4j.PatternLayout
    log4j.appender.CATALINA.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    
  • 修改catalina.sh:在文件开头添加export CATALINA_OUT="/path/to/tomcat/logs/catalina.%Y%m%d.log",使Tomcat输出到Log4j管理的日志文件。
    重启Tomcat后,日志将由Log4j管理,支持更精细的控制。

注意事项

  • 备份重要日志:清理前建议备份包含错误信息(如ERRORSEVERE)的日志文件,避免丢失关键故障信息。
  • 权限问题:确保清理脚本或Logrotate有权限访问Tomcat日志目录(通常为tomcat:tomcatroot)。
  • 测试配置:修改配置文件后,务必测试其正确性(如使用logrotate -d测试Logrotate配置),避免误删日志。
  • 监控磁盘空间:结合监控工具(如df -hPrometheus)实时监控磁盘空间,及时发现日志膨胀问题。

0