--转载
这里,首先介绍一下领个相关的指令:ErrorLog 和 LogLevel
ErrorLog:
说明 | 存放错误日志的位置 |
---|---|
语法 | ErrorLogfile-path|syslog[:facility] |
默认值 |
|
作用域 | server config, virtual host |
ErrorLog
指令指定了当服务器遇到错误时记录错误日志的文件。如果file-path不是一个以斜杠(/)开头的绝对路径,那么将被认为是一个相对于ServerRoot
的相对路径。
ErrorLog /var/log/httpd/error_log
如果file-path以一个管道符号(|)开头,那么会为它指定一个命令来处理错误日志。
ErrorLog "|/usr/local/bin/httpd_errors"
如果系统支持,使用"syslog
"替代文件名将通过syslogd(8)来记载日志。默认将使用系统日志机制local7
,但您可以用"syslog:facility
"语法来覆盖这个设置,其中,facility的取值为syslog(1)中记载的任何一个名字。
ErrorLog syslog:user
当在非Unix平台上输入文件路径的时候,路径分隔符必须统一使用正斜线(/),即使那个平台本身使用反斜线(\)。
LogLevel:
说明 | 控制错误日志的详细程度 |
---|---|
语法 | LogLevellevel |
默认值 | LogLevel warn |
作用域 | server config, virtual host |
可以选择下列level,依照重要性降序排列:
Level | 描述 | 例子 |
---|---|---|
emerg | 紧急(系统无法使用) | "Child cannot open lock file. Exiting" |
alert | 必须立即采取措施 | "getpwuid: couldn't determine user name from uid" |
crit | 致命情况 | "socket: Failed to get a socket, exiting child" |
error | 错误情况 | "Premature end of script. headers" |
warn | 警告情况 | "child process 1234 did not exit, sending another SIGHUP" |
notice | 一般重要情况 | "httpd: caught SIGBUS, attempting to dump core in ..." |
info | 普通信息 | "Server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers)..." |
debug | 调试信息 | "Opening config file ..." |
当指定了某个级别时,所有级别高于它的信息也会被同时记录。比如,指定 LogLevel info ,则所有notice和warn级别的信息也会被记录。
建议至少使用crit级别。
示例如下:LogLevel notice
注意:当错误日志是一个单独分开的正式文件的时候,notice级别的消息总是会被记录下来,而不能被屏蔽。但是,当使用syslog来记录时就没有这个问题。
下面将对错误日记进行详细说明:
错误日志是最重要的日志文件,其文件名和位置取决于ErrorLog
指令。Apache httpd将在这个文件中存放诊断信息和处理请求中出现的错误,由于这里经常包含了出错细节以及如何解决,如果服务器启动或运行中有问题,首先就应该查看这个错误日志。
错误日志通常被写入一个文件(unix系统上一般是error_log
,Windows和OS/2上一般是error.log
)。在unix系统中,错误日志还可能被重定向到syslog
或通过管道操作传递给一个程序。
错误日志的格式相对灵活,并可以附加文字描述。某些信息会出现在绝大多数记录中,一个典型的例子是:
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test
其中,第一项是错误发生的日期和时间;第二项是错误的严重性,LogLevel
指令使只有高于指定严重性级别的错误才会被记录;第三项是导致错误的IP地址;此后是信息本身,在此例中,服务器拒绝了这个客户的访问。服务器在记录被访问文件时,用的是文件系统路径,而不是Web路径。
错误日志中会包含类似上述例子的多种类型的信息。此外,CGI脚本中任何输出到stderr(标准错误)
的信息会作为调试信息原封不动地记录到错误日志中。
用户可以增加或删除错误日志的项。但是对某些特殊请求,在访问日志(access log)中也会有相应的记录,比如上述例子在访问日志中也会有相应的记录,其状态码是403,因为访问日志也可以定制,所以可以从访问日志中得到错误事件的更多信息。
在测试中,对任何问题持续监视错误日志是非常有用的。在unix系统中,可以这样做:
tail -f error_log