简介Apache访问日志在实际工作中非常有用。一个典型的例子就是统计网站流量,查看用户访问时间、地理位置分布、页面点击率等。Apache的访问日志有以下四个功能:记录访问服务器的远程主机的IP地址,以便您可以知道观众来自哪里;记录浏览者访问过的网页资源,可以了解网站哪些部分最受欢迎;记录浏览者使用的浏览器,根据浏览者使用最多的浏览器对站点进行优化;记录浏览者的访问时间;配置自定义日志文件的格式涉及两条指令,分别是LogFormat指令和CustomLog指令,默认的httpd.conf文件中提供了这两条指令的几个示例。LogFormat指令定义了格式,并为格式指定了一个名称,我们后面可以直接引用。CustomLog指令设置日志文件并指定用于日志文件的格式(通常通过格式名称)。LogFormat指令的作用是定义日志格式并为其分配名称。例如,在默认的httpd.conf文件中,我们可以找到以下代码行:LogFormat"%h%l%u%t"%r"%>s%b"common该指令创建了一个名为“common”的类,日志的格式在双引号括起来的内容中指定。格式字符串中的每个变量代表一条特定的信息,这些信息按照格式字符串指定的顺序写入日志文件。Apache文档已经给出了格式字符串中可以使用的所有变量及其含义。下面是它的翻译:%%百分号(Apache2.0.44或更高版本)%a远程IP地址%A本地IP地址%B除HTTP标头外传输的字节数%b中显示的除HTTP标头外传输的字节数CLF格式,即没有字节传输时显示'-'而不是0。%{Foobar}C请求中发送给服务器的cookieFoobar的内容。%D服务器处理该请求所花费的时间,单位为微。%{FOOBAR}e环境变量FOOBAR的值%f文件名%h远程主机%H请求使用的协议%{Foobar}i请求头的内容Foobar:发送到服务器。%l远程登录名(来自identd,如果支持),将得到一个“-”,除非IdentityCheck为“On”。%m请求的方法%{Foobar}n来自另一个模块的Foobar的注释内容。%{Foobar}o响应头Foobar:的内容。%p服务器为该请求提供服务的标准端口。%P为该请求提供服务的子进程的PID。%{format}PServing请求的PID或TID(线程ID),format取值范围为:pid和tid(2.0.46及以后版本)和hextid(需要APR1.2.0及以上版本)%q查询字符串(如果存在则以“?”开头,否则为空字符串)%r请求状态的第一行%s。对于内部重定向的请求,此状态指的是原始请求的状态,-%>s指的是上次请求的状态。%t时间,以正常日志时间格式(标准英文格式)%{format}t时间,以strftime(3)指定的格式。(区域设置格式的默认值)%T请求完成处理所花费的时间,以秒为单位。%u远程用户名(根据认证信息,如果返回状态(%s)为401,可能是假的)%U请求的URL路径,不包含查询字符串。%v为该请求提供服务的完全限定的ServerName。%VUseCanonicalName命令设置的服务器名称。%X请求完成时的连接状态:X=连接在回复完成前终止。+=发送回复后继续保持连接。-=发送回复后关闭连接。(在1.3以后的版本中,这条指令是%c,但这和之前的SSL语法冲突:%{var}c)%I接收到的字节数,包括请求头的数据,不能为0。要使用此命令,您必须启用mod_logio模块。%O发送的字节数,包括请求头中的数据,不能为零。要使用此命令,您必须启用mod_logio模块。常见日志格式示例常见日志格式(CLF)"%h%l%u%t\"%r\"%>s%b"虚拟主机常见日志格式"%v%h%l%u%t\"%r\"%>s%b"NCSA扩展/组合日志格式"%h%l%u%t\"%r\"%>s%b\"%{Referer}i\"%{User-agent}i\""Refererlogformat"%{Referer}i->%U"Agent(Browser)logformat"%{User-agent}i"apacheconfigurationinstanceformat:LogFormat"%h%l%u%t%T\"%r\"%>s%b\"%{Referer}i\"\"%{User-Agent}i\""combinedLogFormat"%h%l%u%t\"%r\"%>s%b"common
