apache的日志管理和配置。

LogFormat指令的语法

Description:	Describes a format for use in a log file
Syntax:	LogFormat format|nickname [nickname]
Default:	LogFormat "%h %l %u %t \"%r\" %>s %b"
Context:	server config, virtual host
Status:	Base
Module:	mod_log_config

CustomLog指令的语法

CustomLog Directive

Description:	Sets filename and format of log file
Syntax:	CustomLog file|pipe format|nickname [env=[!]environment-variable| expr=expression]
Context:	server config, virtual host
Status:	Base
Module:	mod_log_config

所以先通过LogFormat定义一个format,然后在通过CustomLog指令来使用这个format配置。这里的文件是相对ServerRoot的,当然也可以写绝对路径。

例如:

LogFormat "%h %l %u %t \"%r\" %>s %b" myformat
CustomLog logs/access_log myformat

也可以根据条件来决定要不要写入log, 如针对本地请求或某个特定url的请求不要写入日志。

# Mark requests from the loop-back interface
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
# Mark requests for the robots.txt file
SetEnvIf Request_URI "^/robots\.txt$" dontlog
# Log what remains
CustomLog logs/access_log myformat env=!dontlog

甚至还可以针对用户语音的不同而采用不同的日志文件。

SetEnvIf Accept-Language "en" english
CustomLog logs/english_log common env=english
CustomLog logs/non_english_log common env=!english

除此env=[!]以外还可以基于http响应在LogFormat中设置条件,过滤日志。

#响应码为400或501时,需要记录User-agent
LogFormat "%400,501{User-agent}i" browserlog

LogFormat "%!200,304,302{Referer}i" refererlog

如果不希望这个log长时间运行后变的很大很大,可以通过管道的方式来调用其他工具进行日志分割。管道符号| 。

CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" myformat

使用管道需要注意的是安全问题,因为这个程序会已httpd相同用户启动执行。

Security:

If a program is used, then it will be run as the user who started httpd. This will be root if the server was started by root; be sure that the program is secure.

rotatelogs指令语法:

rotatelogs [ -l ] [ -L linkname ] [ -p program ] [ -f ] [ -t ] [ -v ] [ -e ] [ -c ] [ -n number-of-files ] logfile rotationtime|filesize(B|K|M|G) [ offset ]

还有一种就是备份重启的方法:

mv access_log access_log.old
mv error_log error_log.old
apachectl graceful
sleep 600
gzip access_log.old error_log.old

如果单机多站点的情况下,正常都希望对每个虚拟机进行配置日志。只需要将日志命令放入VirtualHost中即可。

split-logfile 这个工具可以用来分隔多虚拟机日志。

发表评论