简介
熟悉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
欢迎转载,转载请指示出处。