温馨提示×

怎样自定义Ubuntu Tomcat日志格式

小樊
40
2025-10-13 15:08:39
栏目: 智能运维

自定义Ubuntu Tomcat日志格式的步骤

1. 区分日志类型:运行日志 vs 访问日志

Tomcat的日志主要分为两类:运行日志(记录应用运行状态、错误信息等,如catalina.out)和访问日志(记录HTTP请求详情,如IP、URL、状态码等)。两者需分别配置:

  • 运行日志:通过conf/logging.properties文件配置(适用于java.util.logging框架);
  • 访问日志:通过conf/server.xml文件配置(使用AccessLogValve组件)。

2. 自定义运行日志格式(logging.properties)

运行日志的默认格式由java.util.logging.SimpleFormatter控制,可通过修改logging.properties文件调整格式。
操作步骤

  • 打开配置文件:
    Ubuntu下Tomcat的logging.properties通常位于/etc/tomcatX/conf/(X为版本号,如9、8)或/opt/tomcat/conf/(手动安装路径)。使用文本编辑器(如nano)打开:

    sudo nano /etc/tomcat9/conf/logging.properties 
  • 方式1:使用SimpleFormatter内置变量(推荐)
    找到java.util.logging.SimpleFormatter.format行(默认可能为%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s %2$s %5$s%6$s%n),替换为自定义格式。常用变量说明:

    • %1$tY:4位年份(如2025);
    • %1$tm:2位月份(如09);
    • %1$td:2位日期(如13);
    • %1$tH:24小时制的小时(如14);
    • %4$s:日志级别(如INFO、SEVERE);
    • %2$s:线程名(如http-nio-8080-exec-1);
    • %5$s:类名(如org.apache.catalina.core.StandardEngine);
    • %6$s:日志消息(如“Server startup in 1234 ms”)。

    示例(包含日期、时间、级别、类名、消息):

    java.util.logging.SimpleFormatter.format = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS [%4$s] [%2$s] %5$s%n 
  • 方式2:自定义Formatter类(高级需求)
    若内置变量无法满足需求(如添加固定前缀、格式化堆栈信息),可创建自定义类继承java.util.logging.Formatter接口。

    • 编写Java类(如CustomFormatter.java):
      import java.util.logging.Formatter; import java.util.logging.LogRecord; public class CustomFormatter extends Formatter { @Override public String format(LogRecord record) { return String.format("[%1$tF %1$tT] [%2$s] [%3$s] - %4$s%n", new java.util.Date(record.getMillis()), // 日期时间 record.getLevel().getLocalizedName(), // 日志级别 record.getSourceClassName(), // 类名 record.getMessage() // 消息 ); } } 
    • 编译并放置到Tomcat的lib目录:
      javac -cp /usr/share/java/logging-api.jar CustomFormatter.java sudo cp CustomFormatter.class /etc/tomcat9/lib/ 
    • 修改logging.properties引用自定义类:
      java.util.logging.ConsoleHandler.formatter = com.example.CustomFormatter 
  • 保存文件并重启Tomcat:

    sudo systemctl restart tomcat9 

3. 自定义访问日志格式(server.xml)

访问日志记录HTTP请求的详细信息(如IP、URL、状态码),通过server.xml中的AccessLogValve组件配置。
操作步骤

  • 打开server.xml文件:

    sudo nano /etc/tomcat9/conf/server.xml 
  • 找到<Host>标签(通常位于<Engine>内),添加或修改<Valve>标签:

    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- 其他配置 --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" resolveHosts="false"/> </Host> 

    pattern参数说明(常用字段):

    • %h:远程主机IP;
    • %l:远程逻辑用户名(通常为-);
    • %u:远程用户身份验证信息(通常为-);
    • %t:请求时间(如[13/Oct/2025:14:30:00 +0800]);
    • "%r":HTTP请求行(如GET /index.html HTTP/1.1);
    • %s:HTTP状态码(如200、404);
    • %b:响应大小(字节,如-表示无内容)。

    示例(包含IP、时间、请求、状态码、响应大小):

    pattern="%h %t "%r" %s %b" 
  • 保存文件并重启Tomcat:

    sudo systemctl restart tomcat9 

4. 验证配置

  • 运行日志:检查Tomcat的logs/catalina.outlogs/catalina.YYYY-MM-DD.log文件,确认日志格式是否符合预期;
  • 访问日志:检查logs/localhost_access_log.YYYY-MM-DD.txt文件,确认访问日志格式是否正确。

通过以上步骤,可灵活自定义Ubuntu Tomcat的运行日志和访问日志格式,满足监控、排查问题的需求。

0