httpd日志和日志轮替工具

本文目录:
1.1 错误日志ErrorLog
1.2 访问日志CustomLog
1.3 日志轮替:rotatelogs工具
1.4 日志轮替:cronolog工具
1.5 rotatelogs和cronolog的比较

需要记录的日志类型有:错误日志ErrorLog、访问日志CustomLog。错误日志一般采用默认即可,最多改下错误日志的存放路径,而CustomLog因为量比较多,很可能需要定制。事实上,ErrorLog由httpd的核心模块提供,而CustomLog却提供了专门的模块mod_log_config来处理,该模块还支持TransferLog指令,该指令和CustomLog作用和用法基本类似,如有需要可查官方手册,本文略过。

最后介绍两种日志轮替工具:apache httpd自带的rotatelogs工具和cronolog工具。 

1.1 错误日志ErrorLog

错误日志的级别LogLevel:debug, info, notice, warn(默认), error, crit, alert, emerg。

错误日志的定义语法:

ErrorLog file-path|syslog[:[facility][:tag]]

如果使用syslog替换file-path,则表示采用系统自带的syslog日志工具,facility是记录syslog日志的设施类型。一般来说,不会采用这种方法记录日志。

如果采用file-path,则有两种方式:直接指定文件路径;前面使用管道,表示将输出的日志作为标准输入传递给管道后的日志处理程序,例如传递给apache自带的rotatelogs工具。例如:

ErrorLog "logs/error_log" ErrorLog "|/usr/local/apache/bin/rotatelogs /var/log/error_log 86400" common

当然,对于ErrorLog来说,数据量并不会太多,一般直接使用文件记录即可。对于CustomLog,则可以考虑使用日志切割工具进行分割、轮替等行为。

错误日志的记录格式由ErrorLogFormat指令控制,例如以下是worker和event模式下错误日志的默认记录格式,其中各参数代表的意义见官方手册。

ErrorLogFormat "[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i" 1.2 访问日志CustomLog

使用CustomLog指令指定访问日志记录的位置,可以在同一个host下多次使用该指令表示同一条日志记录到多个位置。语法格式为:

CustomLog file|pipe format|nickname [env=[!]environment-variable| expr=expression]

使用LogFormat可以指定日志记录的事项,例如是否要记录客户端IP地址,是否要记录请求方法等。使用LogFormat还可以定义日志分类(在httpd术语中称为nickname),例如common类、combined类、combinedio类。它支持非常弹性化的记录事项,具体的见官方手册。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> # You need to enable mod_logio.c to use %I and %O LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule>

然后使用CustomLog指令就可以使用已经定义的日志类。例如:

CustomLog "logs/access_log" combined

当然,使用LogFormat定义分类只是为了方便,CustomLog指令完全可以不使用nickname而是直接定义要记录的事项。例如:

CustomLog "logs/access_log" "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

如果提供CustomLog的第三个参数,即env或者expr,则表示满足条件的请求才会记录日志。例如,当请求的是gif文件时将独立记录该日志,而其他请求则记录在另一个日志中。

SetEnvIf Request_URI \.gif$ gif-image CustomLog "gif-requests.log" common env=gif-image CustomLog "nongif-requests.log" common env=!gif-image

通常来说,除了特殊需求,一般都只需使用LogFormat提供的各个事项即可。否则日志订制就是一件非常恶心且复杂的事情。

1.3 日志轮替:rotatelogs工具

首先说明rotatelogs工具,它是apache httpd提供的一个基于时间间隔、大小切分日志的简单工具。

默认,它在启动时不会立即创建日志文件,而是在有请求到达时才会创建。同理在轮替时也如此,如果到达了轮替的时间间隔,如果没有新请求到达,则暂时不会创建新的日志文件。如果使用"-f"选项,则在启动时,不管是否有没有请求,都立即创建日志文件。如果使用"-c"选项,则在每次轮替时无论是否有新请求到达,都创建新日志文件。

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

选项说明:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/359ce9944ba8036035d2cb968ad401d5.html