温馨提示×

如何在Ubuntu上配置Tomcat日志

小樊
49
2025-09-18 06:29:39
栏目: 智能运维

如何在Ubuntu上配置Tomcat日志

在Ubuntu系统上配置Tomcat日志主要涉及访问日志、运行日志的格式与级别调整、日志分割、轮转管理等步骤,以下是详细操作指南:

1. 准备工作:确认Tomcat配置文件路径

Tomcat的日志配置文件主要集中在$CATALINA_HOME/conf目录下($CATALINA_HOME为Tomcat安装目录,如/opt/tomcat/var/lib/tomcat),关键文件包括:

  • server.xml:用于配置访问日志
  • logging.properties:用于配置**运行日志(如catalina、localhost等)**的级别、格式及处理器。

2. 配置访问日志(记录HTTP请求信息)

访问日志用于记录客户端的HTTP请求详情(如IP、请求方法、响应状态等),需修改server.xml文件:

  • 打开$CATALINA_HOME/conf/server.xml,找到<Host>标签(通常位于文件末尾);
  • 添加或取消注释以下内容(AccessLogValve配置):
    <Valve className="org.apache.catalina.valves.AccessLogValve" 
           directory="logs" 
           prefix="localhost_access_log." 
           suffix=".txt" 
           pattern="%h %l %u %t \"%r\" %s %b %{Referer}i %{User-Agent}i" 
           resolveHosts="false"/>
    
    • 参数说明
      • directory:日志存储路径(相对于$CATALINA_BASE,默认为logs目录);
      • prefix:日志文件前缀(如localhost_access_log.);
      • suffix:日志文件后缀(如.txt);
      • pattern:日志格式(常用common仅记录基本信息,combined记录更详细的请求/响应信息,如引用页、用户代理)。

3. 配置运行日志(记录Tomcat自身及应用日志)

运行日志包括Tomcat启动/关闭信息、应用错误日志等,需修改logging.properties文件:

  • 打开$CATALINA_HOME/conf/logging.properties,调整以下内容:
    • 设置日志级别(从高到低为SEVERE > WARNING > INFO > CONFIG > FINE > FINER > FINEST):
      # 设置catalina日志级别为FINE(记录详细信息),localhost日志级别为INFO
      org.apache.catalina.core.ContainerBase.[Catalina].level = FINE
      org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
      
    • 修改日志格式(自定义ConsoleHandler的格式,包含时间、级别、类名、消息):
      java.util.logging.ConsoleHandler.formatter = java.util.logging.Formatter {
          private static final String format = "[%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS] [%4$-6s] [%2$s: %5$s] %3$s%n";
          public synchronized String format(LogRecord lr) {
              return format.format(new Date(lr.getMillis()), lr.getLevel().getLocalizedName(), 
                                  lr.getMessage(), lr.getSourceClassName(), lr.getSourceMethodName());
          }
      };
      
    • 启用日志轮转(避免单个日志文件过大):
      # 设置catalina日志轮转(保留30天)
      1catalina.org.apache.juli.AsyncFileHandler.rotatable = true
      1catalina.org.apache.juli.AsyncFileHandler.maxDays = 30
      
    保存文件后,重启Tomcat使配置生效:sudo systemctl restart tomcat

4. 使用Logrotate实现日志自动轮转

Logrotate是Linux系统自带的日志管理工具,可自动切割、压缩、删除旧日志,避免磁盘空间耗尽:

  • 安装Logrotate(若未安装):sudo apt-get install logrotate
  • 创建Tomcat专用配置文件:sudo nano /etc/logrotate.d/tomcat,添加以下内容:
    /opt/tomcat/logs/*.log {
        daily                   # 每天轮转
        rotate 30               # 保留30个旧日志
        compress                # 压缩旧日志(如.gz格式)
        missingok               # 若日志不存在也不报错
        notifempty              # 若日志为空则不轮转
        create 640 tomcat tomcat # 新日志文件权限及所有者
        sharedscripts           # 所有日志轮转完成后执行脚本
        postrotate
            /bin/kill -USR1 $(cat /var/run/tomcat.pid) 2>/dev/null || true
        endscript
    }
    
    • 说明postrotate脚本会向Tomcat发送USR1信号,触发Tomcat重新打开日志文件,避免日志丢失。

5. 可选:使用Cronolog进行实时日志分割

Cronolog可根据时间(如天、小时)实时分割日志,适合高流量场景:

  • 安装Cronolog:sudo apt-get install cronolog
  • 修改catalina.sh文件($CATALINA_HOME/bin/catalina.sh),找到exec "$_RUNJAVA"行,在前面添加:
    # 设置CATALINA_OUT使用Cronolog分割
    if [ -z "$CATALINA_OUT" ]; then
        CATALINA_OUT="$CATALINA_BASE/logs/catalina.%Y-%m-%d.out"
    fi
    exec "$_RUNJAVA" \
         -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
         -Djava.util.logging.config.file="$CATALINA_BASE/conf/logging.properties" \
         -Dcatalina.base="$CATALINA_BASE" \
         -Dcatalina.home="$CATALINA_HOME" \
         -Djava.io.tmpdir="$CATALINA_TMPDIR" \
         org.apache.catalina.startup.Bootstrap "$@" start \
         >> "$CATALINA_OUT" 2>&1 &
    
    重启Tomcat后,catalina.out会按天分割为catalina.YYYY-MM-DD.out

6. 日志文件位置说明

Tomcat的日志文件默认存储在$CATALINA_HOME/logs目录下,常见文件包括:

  • catalina.out:Tomcat标准输出/错误输出(未配置分割前);
  • catalina.YYYY-MM-DD.log:Tomcat运行日志(分割后);
  • localhost_access_log.YYYY-MM-DD.txt:访问日志(分割后);
  • localhost.YYYY-MM-DD.log:本地应用日志;
  • manager.YYYY-MM-DD.log:Tomcat Manager应用日志。

通过以上步骤,可实现Tomcat日志的有效配置与管理,满足日常监控、故障排查及合规性需求。

0