温馨提示×

Tomcat日志格式如何修改

小樊
33
2026-07-13 09:07:19
栏目: 智能运维

Tomcat 的日志格式修改,主要取决于你想改的是哪一类日志。Tomcat 常见日志有三类:

  1. 访问日志(Access Log) —— 最常被问到的
  2. 应用日志(如 catalina.out)
  3. 内部日志(java.util.logging 或 Log4j / Logback)

下面分别说明。


一、修改访问日志格式(Access Log)

这是最常用的修改场景,比如改成 JSON、增加响应时间等。

1️⃣ 配置文件位置

conf/server.xml

2️⃣ 找到 AccessLogValve

通常在 <Host> 标签中:

<Host name="localhost"  appBase="webapps">
    <Valve className="org.apache.catalina.valves.AccessLogValve"
           directory="logs"
           prefix="localhost_access_log"
           suffix=".txt"
           pattern="%h %l %u %t "%r" %s %b" />
</Host>

3️⃣ 修改 pattern(核心)

常见格式示例

默认格式

pattern="%h %l %u %t "%r" %s %b"

Apache 常见格式

pattern="combined"

JSON 格式(推荐用于日志采集)

pattern="{"client":"%h","time":"%t","method":"%r","status":"%s","size":"%b","referer":"%{Referer}i","ua":"%{User-Agent}i"}"

增加响应时间

pattern="%h %l %u %t "%r" %s %b %D"

%D:请求耗时(毫秒)

4️⃣ 常用字段说明

字段 含义
%h 客户端 IP
%u 用户
%t 时间
%r 请求(方法 + URL + 协议)
%s HTTP 状态码
%b 响应字节数
%D 请求耗时(ms)
%T 耗时(秒)
%{header}i 请求头
%{header}o 响应头

修改后 重启 Tomcat 生效


二、修改 catalina.out 日志格式

1️⃣ Tomcat 默认情况

  • catalina.out标准输出/错误
  • 默认 没有固定格式
  • 由内部日志系统决定

2️⃣ 修改 java.util.logging(Tomcat 自带)

配置文件:

conf/logging.properties

示例:

java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter

OneLineFormatter 输出示例:

2026-01-21 10:00:00.123 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization

⚠️ 注意:

  • catalina.out 本身 不能自定义格式
  • 只能控制输出内容格式

三、使用 Log4j / Logback(推荐生产环境)

1️⃣ Tomcat + Log4j2(常见)

log4j2.xml 示例

<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1} - %m%n"/>

2️⃣ Logback 示例

<pattern>
    %d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n
</pattern>

✅ 可以控制:

  • 时间格式
  • 日志级别
  • 线程
  • 类名
  • JSON 输出

四、常见修改场景总结

需求 改哪里
访问日志格式 server.xmlAccessLogValve
访问日志 JSON 化 pattern 改成 JSON
catalina.out 格式 logging.properties
应用日志格式 log4j2 / logback
增加请求耗时 %D%T

五、示例:完整 AccessLog 配置(推荐)

<Valve className="org.apache.catalina.valves.AccessLogValve"
       directory="logs"
       prefix="access_log"
       suffix=".log"
       pattern="%h %{X-Forwarded-For}i %t "%r" %s %b %D "%{User-Agent}i""
       resolveHosts="false" />

如果你愿意,可以告诉我:

  • ✅ Tomcat 版本(8 / 9 / 10)
  • ✅ 想改成 JSON / 自定义字段 / 对接 ELK
  • ✅ 改的是 访问日志还是应用日志

我可以直接给你一份可直接复制的配置

0