温馨提示×

Ubuntu Tomcat日志轮转方法

小樊
46
2025-11-22 07:52:27
栏目: 智能运维

Ubuntu Tomcat日志轮转实用指南

一 常用方案与适用场景

  • 使用系统自带的 logrotatecatalina.out 或按目录切割日志,适合绝大多数场景,配置简单、稳定可靠。
  • 使用 cronolog 配合 Tomcat 启动脚本,让 catalina.out 按日期自动命名,天然避免单文件过大。
  • 在应用侧使用 Log4j 2RollingFileAppender 输出业务日志,按天/按大小滚动并自动清理。
  • 使用 systemd 定时触发 logrotate 或将轮转封装为一次性服务,便于纳入系统编排与统一运维。

二 使用 logrotate 的标准做法

  • 安装与准备
    • 安装工具:sudo apt-get update && sudo apt-get install logrotate
    • 确认 Tomcat 日志路径,常见为:/opt/tomcat/logs/catalina.out/var/log/tomcat/*.log
  • 配置示例一(按文件切割 catalina.out,零停机)
    • 新建配置:sudo nano /etc/logrotate.d/tomcat
    • 内容:
      /opt/tomcat/logs/catalina.out {
          daily
          rotate 7
          compress
          missingok
          notifempty
          copytruncate
          create 640 tomcat adm
      }
      
    • 说明:copytruncate 先复制再清空,避免重启 Tomcat;适合无法或不想发送信号的应用场景。
  • 配置示例二(按目录切割,配合信号通知 Tomcat 重开日志)
    • 新建配置:sudo nano /etc/logrotate.d/tomcat
    • 内容:
      /opt/tomcat/logs/*.log {
          daily
          rotate 7
          compress
          missingok
          notifempty
          create 640 tomcat adm
          postrotate
              if [ -f /opt/tomcat/temp/tomcat.pid ]; then
                  kill -USR1 $(cat /opt/tomcat/temp/tomcat.pid)
              fi
          endscript
      }
      
    • 说明:postrotate 发送 USR1 让 Tomcat 重新打开日志文件;需确保 PID 文件路径与 Tomcat 实际一致(常见还有 /var/run/tomcat.pid/opt/tomcat/bin/pid)。
  • 测试与生效
    • 语法检查:sudo logrotate -d /etc/logrotate.d/tomcat
    • 强制执行:sudo logrotate -f /etc/logrotate.d/tomcat
    • 自动执行:logrotate 默认由 /etc/cron.daily/logrotate 每日运行,无需额外定时任务。

三 其他可选方案

  • 使用 cronolog 按日期生成 catalina.out
    • 安装:sudo apt-get install cronolog
    • 修改 /opt/tomcat/bin/catalina.sh,在设置 CATALINA_OUT 的位置加入日期格式:
      if [ -z "$CATALINA_OUT" ]; then
          CATALINA_OUT="/opt/tomcat/logs/catalina.%Y-%m-%d.out"
      fi
      
    • 重启 Tomcat 后,日志将自动按天滚动,避免单文件过大。
  • 使用 Log4j 2 管理业务日志
    • 在应用的 log4j2.xml 中使用 RollingFileAppender,示例:
      <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>
      
    • 说明:按天滚动并最多保留 30 天,可按需调整策略与保留天数。

四 运维与排错要点

  • 权限与属主:确保 Tomcat 运行用户对日志目录与新建文件具备写权限,常见为 tomcat:adm,权限 640
  • PID 路径核对:postrotate 中的 PID 文件路径必须与 Tomcat 实际 PID 文件一致,否则信号无法送达;可用 ps 或 systemctl status tomcat 确认。
  • 避免重复轮转:若已用 cronolog 按日期生成 catalina.out,通常不再对 catalina.out 使用 logrotate 的 copytruncate,以免产生空文件或重复切割。
  • 手动应急清理:当磁盘告警时,可先备份再清空大文件(谨慎操作):
    • 备份并清空:sudo cp /opt/tomcat/logs/catalina.out /tmp/catalina.out.bak && sudo > /opt/tomcat/logs/catalina.out
  • 验证与观察:执行 logrotate 后,检查 /opt/tomcat/logs/ 是否生成 .gz 归档与新的 catalina.out,并确认应用日志写入未中断。

0