温馨提示×

Ubuntu Tomcat日志清理的最佳实践

小樊
58
2025-10-03 06:06:32
栏目: 智能运维

1. 使用Logrotate进行自动化日志轮转与压缩
Logrotate是Ubuntu系统自带的日志管理工具,可自动处理Tomcat日志的轮转、压缩、删除及进程通知。配置步骤如下:

  • 安装Logrotate(若未安装):sudo apt-get install logrotate
  • 创建或编辑Tomcat专用配置文件:sudo vim /etc/logrotate.d/tomcat,添加以下内容:
    /var/log/tomcat/*.log {  # 匹配Tomcat日志目录下的所有.log文件
      daily                # 按天轮转(可改为weekly/monthly)
      rotate 7             # 保留最近7天的日志
      compress             # 压缩旧日志(节省空间)
      missingok            # 若日志文件不存在,不报错
      notifempty           # 若日志为空,不轮转
      create 640 tomcat tomcat  # 新日志文件的权限与所有者(需与Tomcat运行用户一致)
      sharedscripts        # 所有日志处理完成后统一执行postrotate
      postrotate           # 轮转后执行的命令(通知Tomcat重新打开日志文件)
        /bin/kill -USR1 $(cat /var/run/tomcat.pid) 2>/dev/null || true
      endscript
    }
    
  • 测试配置有效性:sudo logrotate -d /etc/logrotate.d/tomcat(模拟运行,不实际修改文件)。
  • 强制立即轮转:sudo logrotate -f /etc/logrotate.d/tomcat
    Logrotate会自动将配置加入系统cron任务,无需额外设置。

2. 配置Tomcat原生日志轮转(可选补充)
若不想依赖Logrotate,可通过Tomcat的logging.properties文件实现原生日志轮转(适用于java.util.logging框架):

  • 定位配置文件:$CATALINA_HOME/conf/logging.properties
  • 修改或添加以下内容(以catalina日志为例):
    handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
    
    # 配置FileHandler(轮转设置)
    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使配置生效:$CATALINA_HOME/bin/shutdown.sh && $CATALINA_HOME/bin/startup.sh
    注意:原生配置仅支持按文件大小轮转,灵活性不如Logrotate。

3. 编写Shell脚本自动化清理旧日志
对于无法用Logrotate处理的日志(如catalina.out,该文件默认不轮转),可编写脚本定期清理:

  • 创建清理脚本:sudo vim /usr/local/bin/clear_tomcat_logs.sh,内容如下:
    #!/bin/bash
    LOG_PATH="/var/log/tomcat"  # Tomcat日志目录(根据实际路径修改)
    find "$LOG_PATH" -name "catalina.out" -mtime +7 -exec rm -f {} \;  # 删除7天前的catalina.out
    find "$LOG_PATH" -name "*.log" -mtime +30 -exec rm -f {} \;       # 删除30天前的其他.log文件
    > "$LOG_PATH/catalina.out"  # 清空当前catalina.out(避免文件过大)
    
  • 赋予执行权限:sudo chmod +x /usr/local/bin/clear_tomcat_logs.sh
  • 设置定时任务(每天23:59执行):sudo crontab -e,添加以下行:
    59 23 * * * /usr/local/bin/clear_tomcat_logs.sh
    

此脚本可补充Logrotate的不足,确保catalina.out等文件不会无限增长。

4. 优化日志级别减少不必要的输出
过高的日志级别(如FINEFINER)会产生大量无用日志,增加磁盘占用。建议调整日志级别:

  • 编辑$CATALINA_HOME/conf/logging.properties文件,修改根日志记录器的级别:
    .handlers = java.util.logging.ConsoleHandler
    .level = WARNING  # 仅记录WARNING及以上级别的日志(ERROR/SEVERE)
    
  • 若需针对特定组件(如localhost)调整级别,可添加:
    org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = WARNING
    

修改后需重启Tomcat生效。此方法可从源头上减少日志量。

5. 控制访问日志的大小与保留
Tomcat的访问日志(由AccessLogValve生成)默认无轮转,需手动配置:

  • 编辑$CATALINA_HOME/conf/server.xml文件,找到AccessLogValve配置项(位于Host标签内),添加或修改以下属性:
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log" suffix=".txt"
           pattern="%h %l %u %t "%r" %s %b" 
           rotatable="true"  # 启用轮转
           maxDays="30"      # 保留30天的日志
           fileDateFormat="yyyy-MM-dd"  # 日志文件按日期命名如localhost_access_log.2025-09-30.txt)
    />
    
  • 保存后重启Tomcat,访问日志将按日期分割并自动删除30天前的文件。

6. 定期备份重要日志
关键日志(如catalina.outlocalhost.log)需定期备份,防止误删或数据丢失:

  • 使用tar命令备份:sudo tar -czvf /backup/tomcat_logs_$(date +%F).tar.gz /var/log/tomcat/
  • 结合定时任务(每周日凌晨2点执行):sudo crontab -e,添加以下行:
    0 2 * * 0 /bin/tar -czvf /backup/tomcat_logs_$(date +\%F).tar.gz /var/log/tomcat/
    

备份文件可存储在外部存储设备或云存储中,确保数据安全。

7. 监控日志文件状态
定期监控日志文件的大小和数量,及时发现异常(如日志暴增):

  • 使用du命令查看日志目录大小:du -sh /var/log/tomcat/
  • 使用ls命令查看日志文件数量:ls -lh /var/log/tomcat/*.log | wc -l
  • 使用tail命令实时查看最新日志:tail -f /var/log/tomcat/catalina.out(按Ctrl+C退出)。
    若发现日志文件异常增长,需立即检查应用程序是否存在错误(如频繁抛出异常)。

0