apache&tomcat access访问日志
2017-01-13 14:02
344 查看
apache日志一般有两种:访问日志和错误日志
错误日志一般分位emerg、alert、crit、error、warn、notice、info、debug,紧急程度依次降低。一般工程出问题了都会选择通过查看错误日志分析原因。
本次主要探讨访问日志。。
如果你使用的是纯Apache服务器,那么访问日志在Apache根目录的conf文件夹内的httpd.conf文件中配置。
如果你使用的是Apache tomcat服务器,那么访问日志在Apache根目录的conf文件夹内的server.xml文件中配置。
由于两者并没什么大的差异,本文仅以tomcat为例。
tomcat中首先在server.xml文件中配置如下:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="combined" prefix="localhost_access_log." suffix=".txt" fileDateFormat="yyyy-MM-dd.HH" resolveHosts="false"/>
className:直接照抄值org.apache.catalina.valves.AccessLogValve即可,Tomcat依靠此java类实现对访问日志文
件的控制。
directory:保存的日志文件路径,前提是相对于tomcat的当前路径。可不设定,缺省值是“logs”(相对于
$CATALINA_HOME)
prefix:保存的日志文件名前缀。
suffix:保存的日志文件名后缀。
resolveHosts:如需将将远端主机的IP地址通过DNS查询转换成主机名,则设为true。如果为false,忽略DNS查询,
直接报告远端的IP地址。 出于性能考虑最好设为false。
fileDateFormat:使用定制的日期格式决定日志文件翻转的频率。如此处设为yyyy-MM-dd.HH则每小时保存一个。去掉
的话。默认是一天。最好直接去掉即可,每天凌晨更新保存一个当天的日志文件。
rotatable:缺省值为true,用来决定日志是否翻转的标志。如果为false,日志文件永远不翻转,并且忽略fileDataFormat。要谨慎使用。最好不要设置,直接使用缺省值。否则日志文件永不翻转,单一文件过大无任何意义,还会给分析使用带来极大不便。
pattern:属性值由字符串常量和pattern标识符加上前缀"%"组合而成。pattern标识符加上前缀"%",用来代替当前请求/响应中的对应的变量值。目前支持如下的pattern:
%a -
远端IP地址
%A -
本地IP地址
%b -
发送的字节数,不包括HTTP头,如果为零即没有发送字节,使用"-"
%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 -
处理请求的时间,以秒为单位
如果你不想自己理解上面的一长串定义,不必头疼。你可以指定pattern的属性值为common或者combined。
这两个是已定义好的普遍使用的模式的名称。分别对应如下:
common - %h %l %u %t "%r" %s %b
combined - %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"
另外,还可以将request请求的查询参数、session会话变量值、cookie值或HTTP请求/响应头内容的变量值等内容写入到日志文件。
它仿照了apache的语法:
%{XXX}i xxx代表传入的头(HTTP Request)
%{XXX}o xxx代表传出的响应头(Http Resonse)
%{XXX}c xxx代表特定的Cookie名
%{XXX}r xxx代表ServletRequest属性名
%{XXX}s xxx代表HttpSession中的属性名
所以pattern可以写成:
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""
或者直接使用最简单的:
pattern="common"
注意:每次更改请重启tomcat服务器
我们可以参看一条实例进行具体分析:
pattern="common"
或者pattern="%h %l %u %t "%r" %s %b"
上文已经提到以上两种配置含义相同,当pattern如此设置时实际的一条访问记录如下(此后均为转载):
216.35.116.91 - - [19/Aug/2000:14:47:37 -0400] "GET / HTTP/1.0" 200 654
这行内容由7项构成,上面的例子中有两项空白,但整行内容仍旧分成了7项
第一项信息是远程主机的地址,即它表明访问网站的究竟是谁。在上面的例子中,访问网站的主机是216.35.116.91。
上例日志记录中的第二项是空白,用一个“-”占位符替代。实际上绝大多数时候这一项都是如此。这个位置用于记录浏览者的标识,这不只是浏览者的登录名字,而是浏览者的email地址或者其他唯一标识符。
日志记录的第三项也是空白。这个位置用于记录浏览者进行身份验证时提供的名字。当然,如果网站的某些内容要求用户进行身份验证,那么这项信息是不会空白的。
日志记录的第四项是请求的时间。这个信息用方括号包围,而且采用所谓的“公共日志格式”或“标准英文格式”。因此,上例日志记录表示请求的时间是2000年8月19日星期三14:47:37。时间信息最后的“-0400”表示服务器所处时区位于UTC之前的4小时。
第五项信息或许是整个日志记录中最有用的信息,它告诉我们服务器收到的是一个什么样的请求。该项信息的典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”。在上例中,METHOD是GET,其他经常可能出现的METHOD还有POST和HEAD。此外还有不少可能出现的合法METHOD,但主要就是这三种。在这个例子中,浏览者请求的是/指向DocumentRoot目录的index.html文档,但根据服务器配置的不同它也可能指向其他的文件。PROTOCOL通常是HTTP,后面再加上版本号。版本号或者是1.0,或者是1.1,但出现1.0的时候比较多。我们知道,HTTP协议是Web得以工作的基础,HTTP/1.0是HTTP协议的早期版本,而1.1是最近的版本。当前大多数Web客户程序仍使用1.0版本的HTTP协议。
日志记录的第六项信息是状态代码。它告诉我们请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的请求,一切正常。此处不准备给出状态代码的完整清单以及解释它们的含义,请参考相关资料了解这方面的信息。但一般地说,以2开头的状态代码表示成功,以3开头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置,以4开头的状态代码表示客户端存在某种错误,以5开头的状态代码表示服务器遇到了某个错误。
日志记录的第七项表示发送给客户端的总字节数。它告诉我们传输是否被打断(即,该数值是否和文件的大小相同)。把日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。
错误日志一般分位emerg、alert、crit、error、warn、notice、info、debug,紧急程度依次降低。一般工程出问题了都会选择通过查看错误日志分析原因。
本次主要探讨访问日志。。
如果你使用的是纯Apache服务器,那么访问日志在Apache根目录的conf文件夹内的httpd.conf文件中配置。
如果你使用的是Apache tomcat服务器,那么访问日志在Apache根目录的conf文件夹内的server.xml文件中配置。
由于两者并没什么大的差异,本文仅以tomcat为例。
tomcat中首先在server.xml文件中配置如下:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="combined" prefix="localhost_access_log." suffix=".txt" fileDateFormat="yyyy-MM-dd.HH" resolveHosts="false"/>
className:直接照抄值org.apache.catalina.valves.AccessLogValve即可,Tomcat依靠此java类实现对访问日志文
件的控制。
directory:保存的日志文件路径,前提是相对于tomcat的当前路径。可不设定,缺省值是“logs”(相对于
$CATALINA_HOME)
prefix:保存的日志文件名前缀。
suffix:保存的日志文件名后缀。
resolveHosts:如需将将远端主机的IP地址通过DNS查询转换成主机名,则设为true。如果为false,忽略DNS查询,
直接报告远端的IP地址。 出于性能考虑最好设为false。
fileDateFormat:使用定制的日期格式决定日志文件翻转的频率。如此处设为yyyy-MM-dd.HH则每小时保存一个。去掉
的话。默认是一天。最好直接去掉即可,每天凌晨更新保存一个当天的日志文件。
rotatable:缺省值为true,用来决定日志是否翻转的标志。如果为false,日志文件永远不翻转,并且忽略fileDataFormat。要谨慎使用。最好不要设置,直接使用缺省值。否则日志文件永不翻转,单一文件过大无任何意义,还会给分析使用带来极大不便。
pattern:属性值由字符串常量和pattern标识符加上前缀"%"组合而成。pattern标识符加上前缀"%",用来代替当前请求/响应中的对应的变量值。目前支持如下的pattern:
%a -
远端IP地址
%A -
本地IP地址
%b -
发送的字节数,不包括HTTP头,如果为零即没有发送字节,使用"-"
%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 -
处理请求的时间,以秒为单位
如果你不想自己理解上面的一长串定义,不必头疼。你可以指定pattern的属性值为common或者combined。
这两个是已定义好的普遍使用的模式的名称。分别对应如下:
common - %h %l %u %t "%r" %s %b
combined - %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"
另外,还可以将request请求的查询参数、session会话变量值、cookie值或HTTP请求/响应头内容的变量值等内容写入到日志文件。
它仿照了apache的语法:
%{XXX}i xxx代表传入的头(HTTP Request)
%{XXX}o xxx代表传出的响应头(Http Resonse)
%{XXX}c xxx代表特定的Cookie名
%{XXX}r xxx代表ServletRequest属性名
%{XXX}s xxx代表HttpSession中的属性名
所以pattern可以写成:
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""
或者直接使用最简单的:
pattern="common"
注意:每次更改请重启tomcat服务器
我们可以参看一条实例进行具体分析:
pattern="common"
或者pattern="%h %l %u %t "%r" %s %b"
上文已经提到以上两种配置含义相同,当pattern如此设置时实际的一条访问记录如下(此后均为转载):
216.35.116.91 - - [19/Aug/2000:14:47:37 -0400] "GET / HTTP/1.0" 200 654
这行内容由7项构成,上面的例子中有两项空白,但整行内容仍旧分成了7项
第一项信息是远程主机的地址,即它表明访问网站的究竟是谁。在上面的例子中,访问网站的主机是216.35.116.91。
上例日志记录中的第二项是空白,用一个“-”占位符替代。实际上绝大多数时候这一项都是如此。这个位置用于记录浏览者的标识,这不只是浏览者的登录名字,而是浏览者的email地址或者其他唯一标识符。
日志记录的第三项也是空白。这个位置用于记录浏览者进行身份验证时提供的名字。当然,如果网站的某些内容要求用户进行身份验证,那么这项信息是不会空白的。
日志记录的第四项是请求的时间。这个信息用方括号包围,而且采用所谓的“公共日志格式”或“标准英文格式”。因此,上例日志记录表示请求的时间是2000年8月19日星期三14:47:37。时间信息最后的“-0400”表示服务器所处时区位于UTC之前的4小时。
第五项信息或许是整个日志记录中最有用的信息,它告诉我们服务器收到的是一个什么样的请求。该项信息的典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”。在上例中,METHOD是GET,其他经常可能出现的METHOD还有POST和HEAD。此外还有不少可能出现的合法METHOD,但主要就是这三种。在这个例子中,浏览者请求的是/指向DocumentRoot目录的index.html文档,但根据服务器配置的不同它也可能指向其他的文件。PROTOCOL通常是HTTP,后面再加上版本号。版本号或者是1.0,或者是1.1,但出现1.0的时候比较多。我们知道,HTTP协议是Web得以工作的基础,HTTP/1.0是HTTP协议的早期版本,而1.1是最近的版本。当前大多数Web客户程序仍使用1.0版本的HTTP协议。
日志记录的第六项信息是状态代码。它告诉我们请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的请求,一切正常。此处不准备给出状态代码的完整清单以及解释它们的含义,请参考相关资料了解这方面的信息。但一般地说,以2开头的状态代码表示成功,以3开头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置,以4开头的状态代码表示客户端存在某种错误,以5开头的状态代码表示服务器遇到了某个错误。
日志记录的第七项表示发送给客户端的总字节数。它告诉我们传输是否被打断(即,该数值是否和文件的大小相同)。把日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。
相关文章推荐
- 关于通过nginx配置到apache-tomcat-7.0.67的端口的时候access中打印访问日志会一直输出nginx的地址而不是用户的真实地址
- 部署错误:尚未授予访问 Tomcat 服务器的权限。请在服务器管理器的 Tomcat 定制器中设置 "manager-script" 角色的正确用户名和口令。 有关详细信息,请查看服务器日志。
- apache访问日志access.log的解析以及如何将其导入mysql
- 截取access.log一段日志 和截取apache的访问日志ip
- Tomcat的访问日志-localhost_access_log和记录Post请求参数
- Servlet、Tomcat访问(access)日志配置、记录Post请求参数
- you don't have permission to access / on this server(Apache Server权限访问问题)
- apache 访问日志access_log 配置和解析 rotatelogs分割日志
- AWStats分析Tomcat\Apache\IIS\nginx 的访问日志
- 通过apache 访问日志access.log 统计IP 和每个地址访问的次数
- tomcat访问(access)日志配置与查询
- tomcat访问(access)日志配置、记录Post请求参数(转)
- Tomcat的访问日志-localhost_access_log和记录Post请求参数
- tomcat访问(access)日志配置、记录Post请求参数
- 配置tomcat容器的access.log访问日志
- python 统计tomcat access日志访问时延
- 【apache2.2】apache2.2中的日志访问文件access.log
- apache服务器访问日志access.log设置
- tomcat访问(access)日志配置和记录Post请求参数
- tomcat访问(access)日志配置、记录Post请求参数