第1页共6页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共6页在Apache下的日志简介Apache提供了广泛记录运行时各方面信息的工具。比如有条件性的记录日志,日志循环,确定IP地址等时普遍会遇到的问题。还讲解很多用于检测您的Apache服务器状态以及分析其日志的捆绑的第三方模块和工具。默认的Apache日志文件Apache提供很多检测和日志工具来追踪服务器的正确运行。默认的Apache配置提供两个日志文件,放置在安装目录下的日志目录里面。access_log这个文件(在windows下对应access.log文件)包含了服务器已经处理过的请求的信息,比如说请求的URL,客户端的IP地址,请求是否被成功完成等。error_log这个文件(在windows下对应error.log文件)包含了与错误情况相关的信息,以及服务器生命周期中不同的大事件。创建日志格式LogFormat"%h%l%u%t\"%r\"%>s%b"commonLogFormat"%h%l%u%t\"%r\"%>s%b"\"%{Referer}i\"\"%{User-agent}i\""combinedLogFormat指令允许你告诉Apache你想要记录请求的哪些方面。而你仍需附加的指令来告诉Apache在哪里记录那些信息,这在下一章中将会介绍。下面的例子显示了两种最受欢迎的格式的配置:普通日志格式和整合日志格式。当Apache收到一个请求,他将会用相应的请求属性来替代以%为前缀的每一个域。如果您正在使用普通日志格式,您的日志文件里的每一项输入看起来都将是这样的:192.168.200.4-someuser[12/Jun/2005:08:33:34+0500]"GET/example.pngHTTP/1.0"2001234如果您正在使用整合日志格式,您的日志文件里的每一项输入看起来则都将是这样的:192.168.200.4-someuser[12/Jun/2005:08:33:34+0500]"GET/example.pngHTTP/1.0"2001234http://www.example.com/index.html"Mozilla/5.0(Windows;U;WindowsNT5.1;en-US;rv:1.7.7)"尽管有附件提供日志格式的详尽索引,下表描述了一些最为重要的域:#%h:客户端(例如,浏览器)向服务器发出连接请求时自己的当时的IP地址或域名(需开启HostNameLookups)。#%u:使用HTTP方式认证用户时,记录下的用户的编号。第2页共6页第1页共6页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共6页#%t:服务器接受到连接请求的时间。#%r:客户端发出的原始连接请求中的文本信息,包含所使用的HTTP方法。#%>s:服务器应答浏览器后的返回状态代码,200表示请求成功。.#%b:服务器应答浏览器发出的单个请求的回传对象的内容大小(字节为单位),不统计数据包头部字节。整合日志格式在普通日志格式的基础上扩展出了两个附加的域。定义为:#%{Referer}i:连接请求数据包包头,包含指向当前页面的文档关联信息。#%{User-agent}i:用户代理连接请求数据包包头,包含客户浏览器的信息。创建一个自定义日志文件CustomLoglogs/access_logcommonTransferLoglogs/sample.log您可能会想创建Apache自带以外的新的日志文件。下面的例子将运用CustomLog来创建一个新的日志文件,并保存由一个之前定义好的日志格式,即前一章提到的common,所定义的信息。您还可以用格式本身的定义来替换昵称。一个附加的,更为简单的指令是Transferlog,它只接受最后一个LogFormat指令提供的定义。重导向日志到一个外部的程序TransferLog"|bin/rotatelogs/var/logs/apachelog86400"你也可以用CustomLog或TransferLog将日志的输出重导向(输出)到一个外部的程序,而不是一个文件。要做到这一点,首先您需要以输出字符"|"开头,跟着是接收日志标准输入信息的程序之路经。本例运用Apache自带的rotatelogs程序,在稍后的章节中会对其有所介绍。当有一个外部程序被使用,它将作为启动httpd的用户被运行。如果服务器是被超级管理员所启动,它就会是超级管理员,完全确保这个程序是安全的。并且,当进入一个非Unix平台上的一个文件路径时,需要小心确保只有正斜杠被使用,即使这个平台可能是允许使用反斜杠的。总的来说,在整个配置文件中总是使用正斜杠是个好主意。有条件的日志请求SetEnvIfRequest_URI"(\.gif|\.jpg)$"imageCustomLoglogs/access_logcommonenv=!imageSetEnvIfRemote_Addr192\.168\.200\.5specialmachineCustomLog...