定制tomcat访问日志

简介

熟悉tomcat的同学应该都很清楚,tomcat日志分为运行日志和访问日志。

运行日志,默认生成在tomcat安装目录下的logs目录下的catalina.out文件。

访问日志,是根据tomcat安装目录下conf目录中的server.xml中的<Valve ..>节点配置的。


配置说明

对访问日志,tomcat官方给出了详细的配置说明。下面以tomcat7为例说明。

官方的在线文档: http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html

本地文档: tomcat安装目录/webapps/docs/config/valve.html


<Valve>节点的配置说明

    className  是访问日志的实现类,可以为org.apache.catalina.valves.AccessLogValve,也可以是org.apache.catalina.valves.ExtendedAccessLogValve

 directory  是访问日志的转出目录

 prefix 是日志文件的文件名前缀

 suffix是日志文件的文件名后缀

 fileDateFormat是设置滚动生成文件的格式,如yyyy-MM-dd是每天滚动生成新日志文件,yyyy-MM-dd.HH是每小时滚动生成新的日志文件。

 rotatable是设置是否滚动生成日志文件,默认置是true

 pattern是设置日志的格式

 encoding是设置日志文件的字符编码

 conditionIf是设置是否生成访问日志,若其值为xxx,当request.getAttribute("xxx")不为空才生成访问日志

 conditionUnless是设置否生成访问日志,若其值为xxx,当request.getAttribute("xxx")空才生成访问日志

 buffered是设置是否缓存日志,默认值为true,当设置为false时,每个request都会立刻产生访问日志

 

pattern配置说明 

 pattern的配置和Valve的className值相关。

className为org.apache.catalina.valves.AccessLogValve

 %a 表示远程主机的ip地址

 %A 表示本地主机的ip地址

 %b 表示发送的字节数,如果为0则用‘-’代替

 %B 表示发送的字节数

 %h 表示远程主机的主机名

 %H 表示请求的协议,http或https

 %l 表示远程逻辑用户名

 %m 表示请求的方法(get, post, put, delete等)

 %p 表示本地接收请求的端口

 %q 表示url中的请求字符串

 %r 表示请求的第一行

 %s 表示响应的状态码

 %S 表示用户session ID

 %u 表示认证通过的远程用户名,否则就是‘-’

 %U 表示请求的路径

 %v 表示要地的服务器名

 %D 表示处理请求的消耗时长,单位是毫秒

 %T 表示处理请求的消耗时长,单位是秒

 %F 表示发送响应的时长,单位是毫秒

 %I 表示处理当前请求的线程名


 %{xxx}i 表示请求头中的xxx的值

 %{xxx}o 表示响应头的xxx的值

 %{xxx}c 表示cookie中xxx的值

 %{xxx}r 表示request.getAttribte("xxx")

 %{xxx}s 表示HttpSession中xxx的值

 %{xxx}p 表示本地端口(xxx为local)或远程端口(xxx为remote)

 %{xxx}t 表示以xxx的格式格式化时间


className为org.apache.catalina.valves.ExtendedAccessLogValve 

 bytes 表示发送的字节数,同%b

 c-dns  表示远程主机名

 c-ip  表示远程主机的ip地址

 cs-method 表示请求的方法,同%m

 cs-uri 表示请求的uri

 cs-uri-query 表示请求url的请求字符串,同%q

 cs-uri-stem 表示请求的URL路径,同%U

 date 以yyyy-mm-dd的格式的时间

 s-dns 表示本地主机名

 s-ip 表示本地主机的ip地址

 sc-status 表示响应的状态码

 time 表示接收请求的时间,格式为HH:mm:ss

 time-taken 表示处理请求的消耗时长,单位为秒

 x-threadname 表示处理当前请求的线程名


 x-H(authType)获取认证类型

 x-H(characterEncoding) 获取字符编码

 x-H(contentLength) 获取内容长度

 x-H(locale)获取本地语言

 x-H(protocol)获取协议

 x-H(remoteUser)获取远程用户

 x-H(requestedSessionId)获取sessionId

 x-H(scheme)获取scheme

 x-H(secure)获取是否secure


 cs(XXX) 表示获取请求头的XXX的值

 sc(XXX) 表示获取响应头的XXX的值

 x-A(XXX) 表示获取context中attribute为XXX的值

 x-C(XXX) 表示获取cookie中XXX的值

 x-O(XXX) for a concatenation of all outgoing response headers with name XXX

 x-P(XXX) 表示获取http请求url中的XXX的值

 x-R(XXX) 表示获取请求中名为XXX的attribute的值

 x-S(XXX) 表示获取session中名为XXX的值


 此外,还可以从java程序中的环境变量中取值。(例如:linux环境中,可以修改tomcat安装目录下bin目录中catalina.sh,添加java程序的环境变量)



如果是常量,可以直接在pattern中用字符串,也可以添加tomcat运行程序的java变量,在pattern中用%{VARIABLE_NAME}来取值。

如果能够通过原始的pattern来取值,直接用对应的pattern。

如果需要计算的值,建议在java程序中计算好后放入request attribute中,通过%{xxx}r或x-R(xxx) 来取值,例如:远程主机的ip通常需要计算,而不直接用%a或c-ip,避免由于代理而取不到正确的值。

Note: 建议给tomcat添加一个单独的filter来处理和访问日志相关的变量。


本文链接:http://blog.csdn.net/musa875643dn/article/details/51636417

欢迎转载,转载请指示出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值