温馨提示×

Ubuntu下Tomcat日志如何管理

小樊
39
2026-01-09 12:00:36
栏目: 智能运维

Ubuntu下Tomcat日志管理实操指南

一 日志位置与类型

  • 常见路径
    • 包管理安装(apt):日志在 /var/log/tomcat9/;配置集中在 /etc/tomcat9/
    • 手动解压安装:日志在 $CATALINA_HOME/logs(常见为 /opt/tomcat/logs)。
  • 主要日志与作用
    • catalina.out:标准输出与错误输出(常需轮转)。
    • catalina.YYYY-MM-DD.log:Tomcat 启停与引擎日志。
    • localhost.YYYY-MM-DD.log:应用运行日志。
    • manager.YYYY-MM-DD.log / host-manager.YYYY-MM-DD.log:管理应用日志。

二 查看与实时监控

  • 实时查看:tail -f /var/log/tomcat9/catalina.out(或对应安装路径下的 catalina.out)。
  • 关键字过滤:grep -i “error” /var/log/tomcat9/catalina.out
  • 结构化分析:结合 awk/sort/uniq 做统计与排查(如按时间段统计请求)。

三 日志轮转与清理

  • 方案A Logrotate 管理 catalina.out(推荐)
    • 新建配置:/etc/logrotate.d/tomcat
      /opt/tomcat/logs/catalina.out {
          daily
          rotate 14
          compress
          missingok
          notifempty
          copytruncate
          dateext
          size 100M
      }
      
    • 说明
      • copytruncate:复制后截断,避免重启 Tomcat;适合持续写入的 catalina.out
      • daily/rotate/size/compress/dateext:按天轮转、保留份数、按大小触发、压缩归档、日期后缀。
      • Ubuntu 的 /etc/cron.daily/logrotate 会每日调用 logrotate,无需额外定时任务。
    • 测试与生效
      • 手动测试:logrotate -f /etc/logrotate.d/tomcat
      • 查看状态:grep logrotate /var/log/syslog
  • 方案B 使用 Tomcat 内置按日轮转
    • 访问日志(server.xml)启用按日切割与保留天数:
      <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" />
      
    • JUL 文件日志(logging.properties)可按天数保留(示例保留 7 天):
      handlers = 1catalina.org.apache.juli.AsyncFileHandler, \
                 2localhost.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.maxDays = 7
      
      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.maxDays = 7
      
    • 提示:访问日志由 AccessLogValve 负责切割;JUL 文件日志通过 maxDays 控制保留天数。

四 日志级别与性能优化

  • 调整全局或包日志级别(conf/logging.properties)
    • 降低噪音:例如将 org.apache.catalina.level = WARNING
  • 使用异步日志提升性能(Tomcat 8+)
    • 将 ConsoleHandler 替换为 AsyncFileHandler,减少 I/O 阻塞:
      handlers = 1catalina.org.apache.juli.AsyncFileHandler, \
                 2localhost.org.apache.juli.AsyncFileHandler, \
                 3manager.org.apache.juli.AsyncFileHandler, \
                 4host-manager.org.apache.juli.AsyncFileHandler
      
  • 按需调整特定组件日志级别(如启动类、个别包)以控制输出量。

五 备份归档与集中化

  • 定期归档到远程存储(示例思路)
    • 使用 rsync/脚本将 /opt/tomcat/logs//var/log/tomcat9/ 按日归档至 NAS/对象存储;配合 logrotate 的 dateext 命名便于保留策略与检索。
  • 集中化分析
    • 将日志接入 ELK(Elasticsearch/Logstash/Kibana)Graylog,实现检索、可视化与告警。

0