Access Log Valve用来创建日志文件,格式与标准的web server日志文件相同。可以使用用日志分析工具对日志进行分析,跟踪页面点击次数、用户会话的活动等。Access Log Valve的很多配置和行为特性与File Logger相同,包括每晚午夜自动切换日志文件。Access Log Valve可以和任何Catalina容器关联,记录该容器处理的所有请求。
例子如下:
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="%{X-Forwarded-For-Pound}i %l %u %t "%r" %s %b %T"%{HTTP_X_UP_CALLING_LINE_ID}i" "%{x-up-calling-line-id}i""%{User-Agent}i"" resolveHosts="false"/>
className |
实现的Java类名。必须被设置成org.apache.catalina.valves.AccessLogValve。 |
directory |
存放日志文件的目录,可以是相对路径或者绝对路径。如果使用相对路径,是指相对于 $CATALINA_HOME的路径。如果不指定directory属性,缺省值是“logs”(相对于 $CATALINA_HOME) |
pattern |
需要记录的请求/响应不同信息域的格式布局。如果是“common”或者“combine”,说明选择标准格式。下面会有关于配置这个属性的更多信息。 |
prefix |
日志文件名的前缀。如果没有指定,缺省值是“access_log.”。如果不想使用前缀,使用长度为0的字符串。 |
resolveHosts |
将远端主机的IP地址通过DNS查询转换成主机名,设为true。如果为false,忽略DNS查询,报告远端的IP地址。 |
suffix |
日志文件名的后缀。如果没有指定,缺省值是“”。如果不想使用后缀,使用长度为0的字符串。 |
rotatable |
缺省值为true,用来决定日志是否翻转的标志。如果为false,日志文件永远不翻转,并且忽略fileDataFormat。要谨慎使用。 |
condition |
打开条件日志。如果设置了这个属性,只有在ServletRequest.getAttribute()是null的时候,才会为请求创建日志。比如,如果condition设为junk,则只有在Servlet.getAttribute("junk")==null的时候,才会记录这个请求。使用过滤器,可以很容易设置(或者取消设置)不同请求的属性。 |
fileDateFormat |
允许在日志文件名称中使用定制的日期格式。日志的格式也决定了日志文件翻转的频率。如果想每个小时翻转一次,将这个值设为yyyy-MM-dd.HH |
pattern属性值由字符串常量和pattern标识符加上前缀"%"组合而成。pattern标识符加上前缀"%",用来代替当前请求/响应中的对应的变量值。目前支持如下的pattern:
·%a - 远端IP地址
·%A - 本地IP地址
·%b - 发送的字节数,不包括HTTP头,如果为0,使用"-"
·%B - 发送的字节数,不包括HTTP头
·%h - 远端主机名(如果resolveHost=false,远端的IP地址)
·%H - 请求协议
·%l - 从identd返回的远端逻辑用户名(总是返回 '-')
·%m - 请求的方法(GET,POST,等)
·%p - 收到请求的本地端口号
·%q - 查询字符串(如果存在,以 '?'开始)
·%r - 请求的第一行,包含了请求的方法和URI
·%s - 响应的状态码
·%S - 用户的session ID
·%t - 日志和时间,使用通常的Log格式
·%u - 认证以后的远端用户(如果存在的话,否则为'-')
·%U - 请求的URI路径
·%v - 本地服务器的名称
·%D - 处理请求的时间,以毫秒为单位
·%T - 处理请求的时间,以秒为单位
运行结果
常使用web服务器的朋友大都了解,一般的web server有两部分日志:
一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息
二是访问日志信息,它记录的访问的时间,IP,访问的资料等相关信息。
现在我来和大家介绍一下利用tomcat产生的访问日志数据,我们能做哪些有效的分析数据?
首先是配置tomcat访问日志数据,默认情况下访问日志没有打开,配置的方式如下:
编辑${catalina}/conf/server.xml文件.注:${catalina}是tomcat的安装目录
把以下的注释()去掉即可。
其中 directory是产生的目录 tomcat安装${catalina}作为当前目录
pattern表示日志生产的格式,common是tomcat提供的一个标准设置格式。其具体的表达式为 %h %l %u %t "%r"%s %b
但本人建议采用以下具体的配置,因为标准配置有一些重要的日志数据无法生。
%h %l %u %t "%r" %s %b %T
具体的日志产生样式说明如下(从官方文档中摘录):
* %a - Remote IP address
* %A - Local IP address
* %b - Bytes sent, excluding HTTP headers, or '-' if zero
* %B - Bytes sent, excluding HTTP headers
* %h - Remote host name (or IP address if resolveHosts isfalse)
* %H - Request protocol
* %l - Remote logical username from identd (always returns'-')
* %m - Request method (GET, POST, etc.)
* %p - Local port on which this request was received
* %q - Query string (prepended with a '?' if it exists)
* %r - First line of the request (method and request URI)
* %s - HTTP status code of the response
* %S - User session ID
* %t - Date and time, in Common Log Format
* %u - Remote user that was authenticated (if any), else '-'
* %U - Requested URL path
* %v - Local server name
* %D - Time taken to process the request, in millis
* %T - Time taken to process the request, in seconds
There is also support to write information from the cookie, incoming header, theSession or something else in the ServletRequest. It is modeled after the apachesyntax:
* %{xxx}i for incoming headers
* %{xxx}c for a specific cookie
* %{xxx}r xxx is an attribute in the ServletRequest
* %{xxx}s xxx is an attribute in the HttpSession
现在我们回头再来看一下下面这个配置 %h %l %u %t "%r"%s %b %T 生产的访问日志数据,我们可以做哪些事?
先看一下,我们能得到的数据有:
* %h 访问的用户IP地址
* %l 访问逻辑用户名,通常返回'-'
* %u 访问验证用户名,通常返回'-'
* %t 访问日时
* %r 访问的方式(post或者是get),访问的资源和使用的http协议版本
* %s 访问返回的http状态
* %b 访问资源返回的流量
* %T 访问所使用的时间
在tomcat下的conf/server.xml中的段加上accessLog
directory="logs" prefix="access_log" fileDateFormat="yyyy-MM-dd.HH"
suffix=".log" rotatable="true" resolveHosts="false"
pattern="%a %t %H %S %r %B %D %s"/>
在做压力测试的时候,请将webapps项目下的log4j.xml文件的日志级别改为WARN,并且里面的事件日志也改为WARN,减少日志输出量,免得影响测试.
accesslog始终打开,这个不会影响。压力测完了,再把事件日志打开。