温馨提示×

如何设置Ubuntu Tomcat日志保留策略

小樊
31
2025-12-25 18:37:47
栏目: 智能运维

Ubuntu Tomcat 日志保留策略设置指南

一 核心思路与适用场景

  • 在 Ubuntu 上,Tomcat 的日志保留通常通过两类机制实现:
    • 使用 logrotate 管理仍在写入的 catalina.out(支持按天/按大小轮转、压缩与自动清理)。
    • 配置 Tomcat 自身的 JULI 文件处理器(如 AsyncFileHandler)按天滚动并设置 maxDays 保留天数,覆盖 catalina、localhost、manager、host-manager 等日志。
    • 访问日志 AccessLogValve,在 server.xml 中启用 rotatable 并设置 maxDays 控制保留天数。
  • 建议同时启用上述机制,分别治理“控制台输出日志”和“按组件文件日志”,实现精细化保留策略。

二 方案一 Logrotate 管理 catalina.out(推荐)

  • 适用:对正在被 Tomcat 进程占用的 catalina.out 做按天/按大小轮转与自动清理,避免文件无限增长。
  • 操作步骤:
    1. 确认日志路径(常见为 $CATALINA_BASE/logs/catalina.out)。
    2. 新建配置文件 /etc/logrotate.d/tomcat,示例(保留 7 天、按天或达到 200M 轮转、压缩、按日期后缀命名):
      /opt/tomcat/logs/catalina.out {
          daily
          rotate 7
          size 200M
          copytruncate
          compress
          missingok
          notifempty
          dateext
          dateformat -%Y%m%d
      }
      
    3. 参数要点:
      • copytruncate:先复制再清空,适用于被进程持续打开的日志;与 create 互斥。
      • rotate 7:保留最近 7 个归档(配合 daily 即约 7 天)。
      • size 200M:达到 200MB 即触发轮转(与 daily 为“或”关系)。
      • dateext/dateformat:使用日期后缀,便于识别与清理。
    4. 测试与生效:
      • 调试:运行 sudo logrotate -d /etc/logrotate.conf(检查语法与执行计划)。
      • 强制执行一次:sudo logrotate -f /etc/logrotate.d/tomcat
      • 自动执行:Ubuntu 通过 /etc/cron.daily/logrotate 每日触发,无需额外定时任务。

三 方案二 Tomcat JULI 文件日志按天保留

  • 适用:对 catalina、localhost、manager、host-manager 等按组件输出的日志,设置按天滚动与保留天数(如 7 天)。
  • 操作步骤:
    1. 编辑 $CATALINA_BASE/conf/logging.properties,将处理器切换为 AsyncFileHandler(可选,性能更好),并为每个处理器设置 rotatable=truemaxDays=7
      handlers = 1catalina.org.apache.juli.AsyncFileHandler, \
                2localhost.org.apache.juli.AsyncFileHandler, \
                3manager.org.apache.juli.AsyncFileHandler, \
                4host-manager.org.apache.juli.AsyncFileHandler, \
                java.util.logging.ConsoleHandler
      
      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.rotatable = true
      1catalina.org.apache.juli.AsyncFileHandler.maxDays = 7
      1catalina.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
      
      2localhost.org.apache.juli.AsyncFileHandler.level = FINE
      2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
      2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
      2localhost.org.apache.juli.AsyncFileHandler.suffix = .log
      2localhost.org.apache.juli.AsyncFileHandler.rotatable = true
      2localhost.org.apache.juli.AsyncFileHandler.maxDays = 7
      2localhost.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
      
      3manager.org.apache.juli.AsyncFileHandler.level = FINE
      3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
      3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
      3manager.org.apache.juli.AsyncFileHandler.suffix = .log
      3manager.org.apache.juli.AsyncFileHandler.rotatable = true
      3manager.org.apache.juli.AsyncFileHandler.maxDays = 7
      3manager.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
      
      4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
      4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
      4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
      4host-manager.org.apache.juli.AsyncFileHandler.suffix = .log
      4host-manager.org.apache.julia.AsyncFileHandler.rotatable = true
      4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 7
      4host-manager.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
      
    2. 重启 Tomcat 使配置生效:sudo systemctl restart tomcat(或按你的服务管理方式执行)。
    3. 说明:
      • maxDays 控制文件日志的保留天数,过期自动删除。
      • 使用 AsyncFileHandler 可降低同步写日志对性能的影响。

四 方案三 访问日志 AccessLogValve 保留策略

  • 适用:控制 localhost_access_log 的保留天数(如 30 天)。
  • 操作步骤: 编辑 $CATALINA_BASE/conf/server.xml,在 Host 内配置(或调整)AccessLogValve:
    <Valve className="org.apache.catalina.valves.AccessLogValve"
           directory="logs"
           prefix="localhost_access_log"
           suffix=".txt"
           rotatable="true"
           maxDays="30"
           pattern="%h %l %u %t "%r" %s %b" />
    
  • 说明:
    • rotatable=true:按天生成新文件。
    • maxDays=30:保留最近 30 天的访问日志,超期自动清理。

五 验证与运维建议

  • 验证要点:
    • 检查轮转是否生效:观察 $CATALINA_BASE/logs 是否出现带日期后缀的归档(如 catalina-2025-12-25.log.gz),以及 catalina.out 是否被截断。
    • 查看 logrotate 执行记录:grep logrotate /var/log/syslog;必要时用 sudo logrotate -f /etc/logrotate.d/tomcat 强制执行一次。
  • 运维建议:
    • 对“正在写入”的 catalina.out 优先使用 copytruncate;若使用 create 方式,需在 postrotate 中发送信号(如 kill -USR1 或重启)通知 Tomcat 重新打开日志文件,否则可能出现写入失败或短暂丢日志。
    • 合理设置保留天数与轮转阈值(如 rotate 7 / maxDays 7size 200M),兼顾审计与磁盘空间。
    • 多实例或多路径场景,可在 /etc/logrotate.d/ 下使用通配符或分别配置,例如:/opt/tomcat*/logs/catalina.out { ... }

0