Apache日志记录,记录以备后查,部份摘抄自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,如果客户端使用了代理,则是代理的IP地址
-
(%l
) 这是由客户端identd
进程判断的RFC1413身份(identity),输出中的符号"-"表示此处的信息无效。除非在严格控制的内部网络中,此信息通常很不可靠,不应该被使用。只有在将IdentityCheck
指令设为 On
时,Apache才会试图得到这项信息
frank
(%u
) 这是HTTP认证系统得到的访问该网页的客户标识(userid),环境变量REMOTE_USER
会被设为该值并提供给CGI脚本。如果状态码是401,表示客户未通过认证,则此值没有意义。如果网页没有设置密码保护,则此项将是"-
"。
[10/Oct/2000:13:55:36 -0700]
(%t
) 这是服务器完成请求处理时的时间,其格式是:[日/月/年:时:分:秒 时区],可以在格式字符串中使用
%{format}t
来改变时间的输出形式
"GET /apache_pb.gif HTTP/1.0"
(\"%r\"
) 引号中是客户端发出的包含许多有用信息的请求行。可以看出,该客户的动作是GET
,请求的资源是/apache_pb.gif
,使用的协议是HTTP/1.0
。另外,还可以记录其他信息,如:格式字符串"%m %U%q %H
"会记录动作、路径、查询字符串、协议,其输出和"%r
"一样。
200
(%>s
) 这是服务器返回给客户端的状态码
2326
(%b
) 最后这项是返回给客户端的不包括响应头的字节数。如果没有信息返回,则此项应该是"-
",如果希望记录为"0
"的形式,就应该用%B
。
组合日志格式(Combined Log Format)
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
CustomLog log/access_log combined
这种格式与通用日志格式类似,但是多了两个 %{header}i
项,其中的header可以是任何请求头。这种格式的记录形如:
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"
其中,多出来的项是:
"http://www.example.com/start.html"
(\"%{Referer}i\"
)- "Referer"请求头。此项指明了该请求是被从哪个网页提交过来的,这个网页应该包含有
/apache_pb.gif
或者其连接。 "Mozilla/4.08 [en] (Win98; I ;Nav)"
(\"%{User-agent}i\"
)- "User-Agent"请求头。此项是客户端提供的浏览器识别信息。
- 日志滚动和管道日志
- 即使一个并不繁忙的服务器,其日志文件的信息量也会很大,一般每10000个请求,访问日志就会增加1MB或更多。这就有必要定期滚动日志文件。由于Apache会保持日志文件的打开,并持续写入信息,因此服务器运行期间不能执行滚动操作。移动或者删除日志文件以后,必须重新启动服务器才能让它打开新的日志文件
-
Apache httpd可以通过管道将访问记录和出错信息传递给另一个进程,而不是写入一个文件,由于无须对主服务器进行编程,这个功能显著地增强了日志的灵活性。只要用管道操作符"|
"后面跟一个可执行文件名,就可以使这个程序从标准输入设备获得事件记录。Apache在启动时,会同时启动这个管道日志进程,并且在运行过程中,如果这个进程崩溃了,会重新启动这个进程(所以我们称这个技术为"可靠管道日志")。管道日志进程由其父进程Apache httpd产生,并继承其权限,这意味着管道进程通常是作为root运行的,所以保持这个程序简单而安全极为重要。
管道日志的一种重要用途是,允许日志滚动而无须重新启动服务器。为此,服务器提供了一个简单的程序
rotatelogs
CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
此配置会建立文件"/var/logs/logfile.nnnn",其中的nnnn是名义上的日志启动时的系统时间(此时间总是滚动时间的倍数,可以用于cron脚本的同步)。在滚动时间到达时(在此例中是24小时以后),会产生一个新的日志。
CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common
此配置会在日志文件大小增长到5兆字节时滚动该日志
ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S.log 5M"
此配置会在错误日志大小增长到5兆字节时滚动该日志,日志文件名后缀会按照如下格式创建:
errorlog.YYYY-mm-dd-HH_MM_SS