Apache支持通用日志格式(Common Log Format)、组合日志格式(Combined Log Format)、条件日志等,今天我们重点介绍通用日志格式。所谓的通用日志格式就是使用标准的格式化字符来定义日志格式。百分号是我们熟知的作为格式化输出的控制字符,Apache也是采用百分号来作为控制字符的。
我们先来看一个典型的记录格式:
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
它定义了一种特定的记录格式字符串,并给它起了个别名叫common ,其中的"%"指示服务器用某种信息替换,其他字符则不作替换。引号(")必须加反斜杠转义,以避免被解释为字符串的结束。格式字符串还可以包含特殊的控制符,如换行符"\n" 、制表符"\t"。
CustomLog指令建立一个使用指定别名的新日志文件,除非其文件名是以斜杠开头的绝对路径,否则其路径就是相对于ServerRoot的相对路径。
上述配置是一种被称为通用日志格式(CLF)的记录格式,它被许多不同的Web服务器所采用,并被许多日志分析程序所识别,它产生的记录形如:
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
记录的各部分说明如下:
127.0.0.1 (%h)
这是发送请求到服务器的客户的IP地址。如果HostnameLookups设为 On ,则服务器会尝试解析这个IP地址的主机名并替换此处的IP地址,但并不推荐这样做,因为它会显著拖慢服务器,最好是用一个日志后续处理器来判断主机名,比如logresolve 。如果客户和服务器之间存在代理,那么记录中的这个IP地址就是那个代理的IP地址,而不是客户机的真实IP地址。
- (%l)
这是由客户端identd进程判断的RFC1413身份(identity),输出中的符号"-"表示此处的信息无效。除非在严格控制的内部网络中,此信息通常很不可靠,不应该被使用。只有在将IdentityCheck指令设为 On 时,Apache才会试图得到这项信息。
frank (%u)
这是HTTP认证系统得到的访问该网页的客户标识(userid),环境变量REMOTE_USER会被设为该值并提供给CGI脚本。如果状态码是401,表示客户未通过认证,则此值没有意义。如果网页没有设置密码保护,则此项将是"-"。
[10/Oct/2000:13:55:36 -0700] (%t)
这是服务器完成请求处理时的时间,其格式是:
[日/月/年:时:分:秒 时区]
日 = 2数字
月 = 3字母
年 = 4数字
时 = 2数字
分 = 2数字
秒 = 2数字
时区 = (+|-)4数字
可以在格式字符串中使用 %{format}t 来改变时间的输出形式,其中的format与C标准库中的strftime()用法相同。
"GET /apache_pb.gif HTTP/1.0" (\"%r\")
引号中是客户端发出的包含许多有用信息的请求行。可以看出,该客户的动作是GET ,请求的资源是/apache_pb.gif ,使用的协议是HTTP/1.0 。另外,还可以记录其他信息,如:格式字符串"%m %U%q %H"会记录动作、路径、查询字符串、协议,其输出和"%r"一样。
200 (%>s)
这是服务器返回给客户端的状态码。这个信息非常有价值,因为它指示了请求的结果,或者是被成功响应了(以2开头),或者被重定向了(以3开头),或者出错了(以4开头),或者产生了服务器端错误(以5开头)。完整的状态码列表参见HTTP规范(RFC2616第10章)。
2326 (%b)
最后这项是返回给客户端的不包括响应头的字节数。如果没有信息返回,则此项应该是"-",如果希望记录为"0"的形式,就应该用%B 。
关于Apache使用通用日志格式记录日志,本文就介绍这么多,希望对您有所帮助,谢谢!