温馨提示×

如何配置Tomcat日志记录访问IP

小樊
34
2025-11-19 17:04:45
栏目: 智能运维

配置 Tomcat 访问日志以记录客户端 IP

一、基本配置步骤

  • 打开 $CATALINA_HOME/conf/server.xml,在 元素内添加或修改 AccessLogValve
  • 通过 pattern 指定包含客户端 IP 的格式,常用为 %a(远程 IP 地址)。
  • 示例(记录远程 IP、时间、请求行、状态码、字节数):
    <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="%a %l %u %t "%r" %s %b" />
    </Host>
    
  • 保存后重启 Tomcat,访问日志将输出到 logs/localhost_access_log.yyyy-MM-dd.txt,其中每条记录的第一个字段即为客户端 IP。

二、常用 pattern 占位符

  • %a:远程 IP 地址(推荐用于记录访问者 IP)
  • %A:本地 IP 地址
  • %h:远程主机名(若 DNS 反向解析开启,可能为域名)
  • %l:远程逻辑用户名(identd,通常为 -
  • %u:远程已认证用户(若未认证为 -
  • %t:日期和时间(通用日志格式)
  • %r:请求第一行(方法、URI、协议)
  • %s:响应状态码
  • %b:发送的字节数(不含 HTTP 头,为 0 时显示 -
  • %B:发送的字节数(不含 HTTP 头)
  • %D:处理时间(毫秒)
  • %T:处理时间(秒)
  • 提示:将 resolveHosts 设为 false 可避免 DNS 反查,直接记录 IP、提升性能。

三、反向代理或负载均衡场景

  • 当存在 Nginx/HAProxy/ELB 等前置代理时,Tomcat 看到的远程地址通常是代理的 IP,需在代理层设置 X-Forwarded-For 并在 Tomcat 日志中使用 %{X-Forwarded-For}i 记录原始客户端 IP:
    • Nginx 示例:
      location / {
          proxy_pass http://127.0.0.1:8080;
          proxy_set_header X-Real-IP       $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
      
    • Tomcat AccessLogValve 示例:
      <Valve className="org.apache.catalina.valves.AccessLogValve"
             directory="logs"
             prefix="localhost_access_log."
             suffix=".txt"
             pattern="%{X-Forwarded-For}i %l %u %t "%r" %s %b" />
      
  • 若代理设置了 X-Real-IP,也可使用 %{X-Real-IP}i 记录。确保仅信任来自代理的头部,避免客户端伪造。

四、日志轮转与路径等常用参数

  • directory:日志目录,默认 logs(相对 $CATALINA_HOME)。
  • prefix/suffix:文件名前缀/后缀,如 localhost_access_log..txt
  • pattern:日志格式,可用 commoncombined 预设,也可自定义。
  • resolveHosts:是否进行 DNS 反查(建议 false)。
  • rotatable:是否按日期轮转(默认 true)。
  • fileDateFormat:自定义滚动文件名日期格式,如 yyyy-MM-dd.HH 实现按小时滚动。
  • condition:条件日志开关,用于按需记录。
  • 示例(按小时滚动,保留 30 天):
    <Valve className="org.apache.catalina.valves.AccessLogValve"
           directory="logs"
           prefix="access."
           suffix=".log"
           pattern="%a %t "%r" %s %b %D"
           rotatable="true"
           fileDateFormat="yyyy-MM-dd.HH"
           maxDays="30" />
    
  • 修改配置后需重启 Tomcat 生效。

0