温馨提示×

Linux Tomcat日志轮转配置指南

小樊
34
2025-12-07 09:38:14
栏目: 智能运维

Linux Tomcat日志轮转配置指南

一 方案总览与选择

  • 使用系统自带的 logrotate:适合绝大多数场景,配置简单、稳定,支持按时间/大小切割、压缩与保留策略,系统通常通过 cron 每日自动执行。适用于 catalina.out 以及按文件切割的日志。
  • 使用 cronolog:通过管道让 Tomcat 按时间自动创建新日志文件(如 catalina.2025-12-07.out),无需额外轮转工具,但对启动脚本有侵入性。
  • 使用 Log4j 2 按日期滚动:在 Tomcat 10 或应用侧使用 Log4j 2 的 RollingFile,可精细控制按天/按大小滚动与保留天数。
    以上三种方式可单独或组合使用,以满足不同日志文件的切割需求。

二 使用 logrotate 管理 catalina.out(推荐)

  • 创建配置文件
    新建文件 /etc/logrotate.d/tomcat,按实际路径修改日志文件路径与用户组:
    /usr/local/tomcat/logs/catalina.out {
        daily
        rotate 7
        compress
        missingok
        notifempty
        copytruncate
    }
    
    关键参数说明:
    • daily:按天轮转;可改为 size 100M 等实现按大小触发。
    • rotate 7:保留最近 7 个归档。
    • compress:压缩归档,节省空间。
    • missingok:日志不存在时不报错。
    • notifempty:空文件不轮转。
    • copytruncate:复制后截断原文件,避免重启应用(适合无法发信号的应用)。
  • 测试与生效
    • 调试:sudo logrotate -d /etc/logrotate.d/tomcat
    • 强制执行:sudo logrotate -f /etc/logrotate.d/tomcat
  • 自动执行
    logrotate 默认由系统的 /etc/cron.daily/logrotate 每日调用,无需额外配置。
  • 多实例与多文件
    可统一匹配:/usr/local/tomcat*/logs/*.out { … };或为每个实例/应用分别配置。
    以上配置与用法适用于常见发行版与 Tomcat 版本。

三 使用 cronolog 按时间自动切割 catalina.out

  • 安装 cronolog(示例)
    wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
    tar xzf cronolog-1.6.2.tar.gz
    cd cronolog-1.6.2
    ./configure --prefix=/usr/local/cronolog
    make && sudo make install
    
  • 修改 Tomcat 启动脚本
    编辑 bin/catalina.sh,找到类似行:
    org.apache.catalina.startup.Bootstrap "$@" start >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &
    
    替换为(注意有两处需要修改):
    org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | \
      /usr/local/cronolog/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &
    
    重启 Tomcat 后,将自动生成按日期命名的日志文件(如 catalina.2025-12-07.out)。
    该方式无需 logrotate 即可按时间切割,但对脚本有侵入性,升级 Tomcat 时需留意变更。

四 使用 Log4j 2 按日期滚动(Tomcat 10 或应用侧)

  • 在应用或 conf/logging.properties 中配置 Log4j 2 的 RollingFile Appender,示例:
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN">
      <Appenders>
        <RollingFile name="RollingFile"
                     fileName="logs/app.log"
                     filePattern="logs/app-%d{yyyy-MM-dd}.log.gz">
          <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
          <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
          </Policies>
          <DefaultRolloverStrategy max="30"/>
        </RollingFile>
      </Appenders>
      <Loggers>
        <Root level="info">
          <AppenderRef ref="RollingFile"/>
        </Root>
      </Loggers>
    </Configuration>
    
    要点:
    • filePattern 使用日期模式(如 %d{yyyy-MM-dd})实现按天滚动。
    • TimeBasedTriggeringPolicy interval=“1” 表示每天滚动;modulate=“true” 使滚动边界对齐到自然日。
    • DefaultRolloverStrategy max=“30” 保留最近 30 天日志。
      适用于需要应用内更细粒度日志策略的场景。

五 验证与运维要点

  • 验证与排错
    • 调试配置:logrotate -d /etc/logrotate.d/tomcat(语法与执行计划检查)。
    • 强制执行:logrotate -f /etc/logrotate.d/tomcat(立即切割,便于验证)。
  • 权限与属主
    • 确保 Tomcat 用户对日志目录与文件具备读写权限;在 logrotate 中使用 create 640 tomcat adm 可统一归档文件权限与属主。
  • 信号与重启
    • 若不使用 copytruncate,可在 postrotate 中向 Tomcat 进程发送信号(如 kill -USR1 或基于 /var/run/tomcat.pidkill -HUP)以重新打开日志文件;使用 copytruncate 则可避免信号与重启。
  • 多实例与通用脚本
    • 多实例建议统一目录规范,使用通配符(如 /usr/local/tomcat/logs/*.out*)或编写通用脚本批量处理。
  • 执行频率
    • logrotate 通常由 /etc/cron.daily/logrotate 每日调用;如需调整频率,可修改系统的 cron 任务。
      以上要点可帮助快速定位问题并确保长期稳定运行。

0