温馨提示×

Linux下Tomcat日志管理技巧

小樊
42
2025-11-15 06:01:28
栏目: 智能运维

Linux下Tomcat日志管理技巧

一 日志体系与定位

  • 常见日志路径为:/var/log/tomcat$CATALINA_BASE/logs。核心文件与作用如下:
    • catalina.out:标准输出与错误重定向的合并日志(控制台日志)。
    • catalina.[日期].log / localhost.[日期].log:JULI 按日期滚动的引擎与应用日志。
    • localhost_access_log.[日期].txt:访问日志,记录 HTTP 请求。
  • 快速定位日志目录可用命令:sudo find / -type d -name "logs" 2>/dev/null | grep tomcat

二 日志轮转与清理

  • 使用 Logrotate 管理 catalina.out(推荐)
    • 新建配置:/etc/logrotate.d/tomcat
    • 示例要点:
      • catalina.out 按天轮转、保留 7 天、启用压缩、支持按大小触发(如 500M)。
      • 使用 copytruncate 避免重启 Tomcat;设置文件权限与属主;必要时在 postrotate 中发送 HUP 信号(按实际进程管理方式调整)。
    • 示例配置:
      /opt/tomcat/logs/catalina.out {
          daily
          rotate 7
          compress
          delaycompress
          missingok
          notifempty
          copytruncate
          create 640 tomcat tomcat
          postrotate
              # 如使用 systemd,可改为 systemctl reload tomcat 或 kill -HUP <pid>
          endscript
      }
      
    • 测试与执行:logrotate -d /etc/logrotate.d/tomcat(语法检查),logrotate -f /etc/logrotate.d/tomcat(强制执行)。
  • 使用 cronolog 按时间切割 catalina.out
    • 安装:sudo apt-get install cronolog(或 yum 安装)。
    • 修改 bin/catalina.sh
      • if [ -z "$CATALINA_OUT" ]; then CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out; fi 改为 CATALINA_OUT="$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out
      • 注释或删除 touch "$CATALINA_OUT"
      • 将启动行中的 >> "$CATALINA_OUT" 2>&1 & 替换为 | /usr/local/sbin/cronolog "$CATALINA_OUT" >> /dev/null &
      • 重启 Tomcat 生效。
  • 访问日志轮转
    • conf/server.xmlAccessLogValve 中启用 rotatable="true" 并设置 maxDays(如 30 天)以自动清理历史访问日志。
  • 按时间清理旧日志的脚本范式
    • 示例(清理 30 天前日志并清空 catalina.out):
      #!/bin/bash
      LOG_PATH="/opt/tomcat/logs"
      find "$LOG_PATH" -mtime +30 -name "catalina.*.log" -delete
      find "$LOG_PATH" -mtime +30 -name "localhost.*.log" -delete
      find "$LOG_PATH" -mtime +30 -name "localhost_access_log.*.txt" -delete
      > "$LOG_PATH/catalina.out"
      
    • 加入 crontab0 1 * * * /opt/tomcat/bin/clear_tomcat_logs.sh

三 日志级别与性能优化

  • 调整 JULI 日志级别
    • 编辑 conf/logging.properties
      • 全局或组件级别调高:org.apache.catalina.level = WARNING
      • 减少启动噪音:org.apache.catalina.startup.level = WARNING
  • 启用异步日志(Tomcat 8+)
    • ConsoleHandler 替换为 AsyncFileHandler,降低同步写磁盘带来的停顿:
      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
      
  • 访问日志按需记录
    • 精简 pattern,仅保留必要字段;结合 maxDays 控制保留周期,避免无限制增长。

四 备份与归档

  • 打包归档
    • 使用 tar 压缩日志目录,便于离线存储与传输:
      sudo tar czvf tomcat_logs_$(date +%F).tar.gz /opt/tomcat/logs
      
  • 恢复流程
    • 建议停机后解压至原目录并恢复权限,再启动 Tomcat,确保日志连续性与可用性。

五 日常运维命令与排错

  • 常用命令
    • 实时查看:tail -f /opt/tomcat/logs/catalina.out
    • 关键字检索:grep -i "error" /opt/tomcat/logs/catalina.out | tail -n 50
    • 分页查看:less /opt/tomcat/logs/localhost_access_log.*.txt
  • 安全清理
    • 避免直接 rm 正在写入的日志;优先使用 logrotatecopytruncatecronolog 按时间切割;超大文件需清理时先备份再清空。
  • 变更注意
    • 修改 catalina.shlogging.properties 后需重启 Tomcat;生产环境建议先在测试环境验证并安排维护窗口。

0