1、日志类型
  
1.3 版本Apache 的标准中规定了4类日志:
  
错误日志
  
访问日志
  
传输日志
  
Cookie日志
  
其中:传输日志和Cookie日志被Apache 2.0认为已经过时。所以本文仅讨论错误日志和访问日志。同时错误日志和访问日志被Apache 2.0默认设置。
  
错误日志包含:
  
获知失效链接
  
获知 CGI 错误
  
获知用户认证错误
  
访问日志包含:
  
访问服务器的远程机器的地址:可以得知浏览者来自何方
  
浏览者访问的资源:可以得知网站中的哪些部分最受欢迎
  
浏览者的浏览时间:可以从浏览时间(如工作时间或休闲时间)对网站内容进行调整
  
浏览者使用的浏览器:可以根据大多数浏览者使用的浏览器对站点进行优化
  
访问日志分类:
  
为了便于分析 Apache 的访问日志,Apache 的默认配置文件中,按记录的信息不同(用不同格式昵称说明不同的信息)将访问日志分为4类:
  
代理日志格式(agent log format) agent 记录请求的用户代理
  
综合日志格式(combined log format) combined 结合以上三种日志信息
  
普通日志格式(common log format,CLF) common 大多数日志分析软件都支持这种格式
  
参考日志格式(referer log format) referer 记录客户访问站点的用户身份
  
2、配置访问日志命令
  
CustomLog 命令用来对服务器的请求进行日志记录。格式为:
  
格式1:CustomLog 访问日志文件名 记录格式说明串|格式昵称
  
格式2:CustomLog "|管道程序名 访问日志文件名" 记录格式说明串|格式昵称
  
说明:
  
访问日志文件名:除非文件位置用”/“开头,否则所制定的文件位置是相对于 ServerRoot 目录的相对路径
  
格式昵称:使用 LogFormat 命令将一个记录格式说明串赋以一个名称
  
记录格式说明串:用字符串和格式说明符(以%开头)指定日志记录的内容
  
管道程序名:管道符”|”后面紧跟着一个程序的路径,这个程序把日志从标准输入设备中读入并处理。
  
LogFormat 命令用于定义访问日志的记录格式。格式为:
  
LogFormat "记录格式说明串" 格式昵称
  
从apache2.conf 中可知,在Apache 中定义了下面的 4 种类型的访问日志:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
  LogFormat "%h %l %u %t \"%r\" %>s %b" common
  LogFormat "%{Referer}i -> %U" referer
  LogFormat "%{User-agent}i" agent
由于综合日志格式简单地结合了3种日志信息,所以在配置访问日志时,要么使用一个综合文件进行记录,要么使用分离的多个(1-3)文件记录。通常使用一个综合日志格式文件进行记录,配置为:
CustomLog /var/log/apache2/access.log combined
  若使用3个文件分别进行记录,配置为:
CustomLog /var/log/apache2/access.log common
  CustomLog /var/log/apache2/referer.log referer
  CustomLog /var/log/apache2/agent.log agent
  下面的命令组:
LogFormat "%h %l %u %t \"%r\" %>s %b" common
  CustomLog logs/access_log common
  与下面的命令等效:
CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
  通常我们配置访问日志时,使用先使用 LogFormat 命令定义格式昵称,然后再在 CustomLog 命令中引用昵称的方法。
  在使用 LogFormat 和 CustomLog 命令中为了说明要记录的日志内容,可以使用的常用格式说明符如表-3。
格式说明符
说明
%v
进行服务的服务器的标准名字 ServerName,通常用于虚拟主机的日志记录中。
%h
客户机的 IP 地址。
%l
从identd服务器中获取远程登录名称,基本已废弃。
%u
来自于认证的远程用户。
%t
连接的日期和时间。
%r
HTTP请求的首行信息,典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”。经常可能出现的 METHOD 是 GET、POST 和 HEAD;RESOURCE 是指浏览者向服务器请求的文档或 URL;PROTOCOL 通常是HTTP,后面再加上版本号,通常是 HTTP/1.1。
%>s
响应请求的状态代码,一般这项的值是 200,表示服务器已经成功地响应浏览器的请求,一切正常;以 3 开头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置;以 4 开头的状态代码表示客户端存在某种错误;以 5 开头的状态代码表示服务器遇到了某个错误。
%b
传送的字节数(不包含HTTP头信息),将日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。
%{Referer}i
记录引用此资源的网页。
%U
请求的URL路径,不包含查询串。
  图2是从一个访问日志文件中截取的几条记录。这里使用winscp远程登录到Solaris 10 服务器的日志文件目录。

apache 访问日志

 图2 apache 访问日志
  
将其中一列各项信息分离于表-4所示。

格式说明符

举例1
%h
远程主机IP
192.168.220.1
%l

-(表示没有取得信息)
%u

-
%t
访问日期,时间和时差

14/Oct/2008:19:54:51 +0800
%r
请求 / 版本
"GET / HTTP/1.1"
%>s
服务状态码
404
%b
发送的字节数
1185
%{Referer}i

”-”
%{User-Agent}i

  3、配置错误日志

  错误日志记录了服务器运行期间遇到的各种错误,以及一些普通的诊断信息,比如服务器何时启动、何时关闭等。

  ErrorLog 命令指定了当服务器遇到错误时记录错误日志的文件名。其格式为:

  格式1:ErrorLog 错误日志文件名

  格式2:ErrorLog "|管道程序名"

  格式1直接指定错误日志文件名,除非文件位置用”/“开头,否则 ErrorLog 所制定的文件位置是相对于 ServerRoot 目录的相对路径。

  格式2实现管道日志,它指定一个命令来处理错误日志。

  Apache 编译时默认的错误日志可以使用如下命令获得:
$ apache2 -V| grep DEFAULT_ERRORLOG
  -D DEFAULT_ERRORLOG="logs/error_log"
  LogLevel

  LogLevel 用于调整记于错误日志中的信息的详细程度。
等级
应用说明
级别
emerg
出现紧急情况使得该系统不可用,如系统宕机等
1
alert
需要立即引起注意的情况
2
crit
危险情况的警告
3
error
除了emerg、alert、crit的其他错误
4
warn
警告信息
5
notice
需要引起注意的情况,但不如error、warn重要
6
info
值得报告的一般消息
7
debug
由运行于debug模式的程序所产生的消息
8
  图3是从一个访问错误文件中截取的几条记录。这里使用winscp远程登录到Solaris 10 服务器的日志文件目录。

apache 错误日志

  图3 apache 错误日志

  从文件内容可以看出,每一行记录了一个错误。格式为:

  日期和时间 错误等级 错误消息