Tomcat打印Access Log配置

本文是基于Tomcat 7.0.55版本来配置打印Access Log。

修改server.xml

在Tomcat安装目录下conf子目录下的server.xml文件中<host>元素下增加一行配置:

1
2
3
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/log/tomcat"
prefix="access" suffix=".log" renameOnRotate="true"
pattern="%t&#9;%a&#9;%A&#9;&quot;%r&quot;&#9;%s&#9;%D&#9;%b&#9;%I"/>

其中:

  1. className 实现Access Log打印的class名称,按照Tomcat官方文档中说必须是:org.apache.catalina.valves.AccessLogValve
  2. directory 存放日志文件的目录地址,可以是绝对地址也可以是相对地址。
  3. prefix Access Log文件名的前缀,如果不设置,则为access_log.
  4. suffix Access Log文件名的后缀,如果不设置,则为空字符串””
  5. renameOnRotate Access Log文件名默认是带日期格式,例如:access2015-12-17.log。如果设置该参数为true,那么Access Log文件名默认是access.log,日志文件会按照日期自动滚动。该参数默认是false。
  6. pattern 用来格式化打印请求和响应的相关信息,注意:其中&#9;代表使用\t来作为分隔符(如果想采用空格作为分隔符,请使用&nbsp;),&quot;代表双引号”。
    这边只介绍了几个常用的属性,更详细的属性介绍,见文末的参考
    下面将介绍一下pattern属性的内容.

pattern属性介绍

pattern属性值主要用来定义打印请求和响应的相关信息,例如:请求时间,请求URL,请求者的IP,HTTP状态码,响应时间,返回的字节数等等。

  • %t 日志和时间,例如:[20/Dec/2015:00:00:00 +0800]
  • %a 远程IP地址,例如:192.168.1.100
  • %A 本机IP地址,例如:192.168.1.1。注意:使用InetAddress.getLocalHost().getHostAddress();来打印本机的IP,如果在/etc/hosts中配置了127.0.0.1 本机hostname,那么将会打印127.0.0.1。
  • %r HTTP请求的信息,包括:http方法,请求URL,http协议。例如:”GET /hello-web/sayHello HTTP/1.1”
  • %s 响应的HTTP状态码。例如:200,404,502等
  • %D 处理该HTTP请求的时间,单位为毫秒。
  • %b 发送的字节数,不包含HTTP头部大小。如果是0的话,打印”-“。
  • %I 处理当前请求的线程名称,例如:http-nio-8080-exec-475。

也支持打印HTTP headers,cookies,session以及request的属性信息。

  • %{xxx}i 打印request的header信息,其中xxx为header的key,例如:打印User Agent信息采用%{User-Agent}i
  • %{xxx}o 打印response的header信息,其中xxx为header的key。
  • %{xxx}c 打印cookie的信息,其中xxx为cookie的key
  • %{xxx}s 打印session的信息,其中xxx为session的key。

这边只只介绍了部分属性,详细内容见官方文档,见文末的参考

参考

  1. http://twb.iteye.com/blog/182100
  2. http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Access_Logging