Apache
服务器在现在来看还是一个应用很广的服务器,在我们的项目组中,生产服务器就是配的Apache
服务器,而Apache
服务器的日志对国人看起来并不是很友好,故花时间了解了一下Apache
服务器日志,希望对于以后的数据追踪能够提供帮助。
在conf\httpd.conf
中,找到CustomLog
位置,我们对日志文件的配置,主要在于此处。
日志文件
<IfModule log_config_module>
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
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>
#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here. Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
CustomLog "logs/access_log" common
#
# If you prefer a logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
#CustomLog "logs/access_log" combined
</IfModule>
在这里,定义了common
和combined
两种日志记录格式,很明显的,combined
中使用了%{User-Agent}
打点了用户的访问的浏览器,这在很多情况下有用。用common
打出来的access_log
日志内容如下
127.0.0.1 - - [01/Aug/2019:17:55:02 +0800] "GET / HTTP/1.1" 200 45
而采用combined
打印出来的日志格式:
127.0.0.1 - - [02/Aug/2019:09:34:07 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"
日志文件可以有多份,根据需求打点,如
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
CustomLog logs/referer_log "%{Referer}i -> %U"
CustomLog logs/agent_log "%{User-agent}i"
日志格式说明
参照 http://httpd.apache.org/docs/current/logs.html 对其中的日志格式都是进行了说明
%h
代表host
%t
代表时间,时间格式是: [day/month/year:hour:minute:second zone]
%>s
代表状态吗
%r
代表请求,包括类型和路径,其中路径可以包含该query
但是不包含POST
的请求参数
更多日志格式相关参数参考:
http://httpd.apache.org/docs/current/mod/mod_log_config.html#customlog
一个很重要的问题在于定制日志日期格式,而在这里需要参考 strftime
, https://linux.die.net/man/3/strftime
输出一个日期格式为2019-08-02 11:39:40
这样格式的配置为:
LogFormat "%h %l %u %{%Y-%m-%d %T}t \"%r\" %>s %b" common
日志拆分方案
日志文件的大小增长随着请求的增加而快速增长,而大文件的写入会越来越慢,故日志的拆分是很有必要,较好的方案是根据时间进行日志拆分
参考: http://httpd.apache.org/docs/current/programs/rotatelogs.html
使用rotatelogs
实现,如:每24小时进行日志拆分(86400s为24小时)
CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
如果在拆分后要带日期格式,如:
CustomLog "|bin/rotatelogs -l /var/log/logfile.%Y.%m.%d 86400" common
网友评论