Spring Boot 内嵌 Tomcat 访问日志常用配置

在 Spring Boot 应用中,可以通过配置内嵌 Tomcat 的 Access Log Valve 来记录 HTTP 访问日志。以下是常用配置示例及日志格式 Pattern 的详细说明。

配置示例

以下 YAML 配置展示了如何启用访问日志、指定存储目录及定义日志格式:

server:
  tomcat:
    accesslog:
      enabled: true                 # 是否开启日志
      directory: /tmp/accesslogs/mobile-site   # 日志存储目录
      pattern: '%t %a %A %m %U%q %s %D %I %B'  # 日志格式
      prefix: access                # 日志文件前缀
      rename-on-rotate: true        # 是否启用日志轮转

Pattern 配置说明

Tomcat 访问日志支持多种占位符变量,用于记录请求的不同维度信息。常用变量对照表如下:

变量英文含义中文说明
%aRemote IP address远程 IP 地址(注意:经过 Nginx 等转发可能不是原始 IP)
%ALocal IP address本地 IP 地址
%bBytes sent (or '-')发送字节数,不含 HTTP 头;若为 0 则显示 -
%BBytes sent发送字节数,不含 HTTP 头
%hRemote host name远程主机名称(若 resolveHosts 为 false 则显示 IP)
%HRequest protocol请求协议(如 HTTP/1.1)
%lRemote logical username远程逻辑用户名(通常返回 -
%mRequest method请求方法(如 GET, POST)
%pLocal port接受请求的本地端口
%qQuery string查询字符串(若存在则前缀 ?,否则为空)
%rFirst line of the requestHTTP 请求的第一行(包含方法、URI 等)
%sHTTP status codeHTTP 响应状态码(如 200, 404)
%SUser session ID用户 Session ID
%tDate and time日期和时间(Common Log Format 格式)
%uRemote user经过认证远程用户
%URequested URL path请求的 URL 路径
%vLocal server name本地服务器名称
%DTime taken (millis)处理请求的时间,单位毫秒
%TTime taken (seconds)处理请求的时间,单位秒
%IRequest thread name当前请求线程名(可用于与堆栈日志对比排查问题)

说明

  1. 版本兼容性:上述配置属性 server.tomcat.accesslog.* 适用于 Spring Boot 2.x 及 3.x 版本。在 Spring Boot 2.4 之前,部分属性可能使用 server.tomcat.access-log-enabled 等形式。
  2. IP 地址获取:若应用部署在反向代理(如 Nginx)之后,%a 获取的可能是代理服务器的 IP。如需获取客户端真实 IP,通常需配合 server.use-forward-headers 配置或自定义 Filter 处理。