[Apache] 了解访问日志格式设置
你好。
我是系统解决方案部门的宫崎。
在这篇文章中,我想简单介绍一下apache访问日志的格式。
服务器设置
操作系统版本
[root@Webserver local]# cat /proc/version Linux 版本 4.9.51-10.52.amzn1.x86_64 (mockbuild@gobi-build-64010) (gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC ) ) #1 SMP 2017 年 9 月 29 日星期五 01:16:19 UTC 2017
阿帕奇版本
[root@localhost]# httpd -v 服务器版本:Apache/2.4.27 (Amazon)
apache配置文件写入/etc/httpd/conf/httpd.conf,具体取决于操作系统。
Apache访问日志输出目的地
访问日志的输出目的地由CustomLog决定。
[root@Webserver ~]# less /etc/httpd/conf/httpd.conf CustomLog "logs/access_log" 组合
CustomLog默认是用相对路径写入的。
该相对路径由项目“ServerRoot”的相对路径表示。
“ServerRoot”设置也写入此 httpd.conf 文件中。
[root@Webserver ~]# less /etc/httpd/conf/httpd.conf ServerRoot "/etc/httpd"
也就是说CustomLog的位置是
由于 ServerRoot/logs/access_log
是 /etc/httpd/logs/acces_log。
[root@Webserver ~]# ls -l /etc/httpd/ 总计 12 drwxr-xr-x 2 root root 4096 10 月 27 日 13:36 conf drwxr-xr-x 2 root root 4096 10 月 27 日 13:36 conf.d drwxr -xr-x 2 root root 4096 Oct 27 13:36 conf.modules.d lrwxrwxrwx 1 root root 14 Oct 27 13:36 日志 -> /var/log/httpd lrwxrwxrwx 1 root root 24 Oct 27 13:36 模块 -> /usr/lib64/httpd/modules lrwxrwxrwx 1 root root 14 Oct 27 13:36 run -> /var/run/httpd
/etc/httpd/logs/ 已替换为 /var/log/httpd。
这意味着访问日志将位于/var/log/httpd/access_log。
[root@Webserver ~]# ls -l /var/log/httpd 总计 8 -rw-r--r-- 1 root root 1285 十月 27 13:44 access_log -rw-r--r-- 1 root root 1832 10 月 27 日 15:02 error_log
Apache 访问日志格式
apache访问日志的格式由/etc/httpd/conf/httpd.conf中的LogFormat部分决定。
[root@Webserver ~]# less /etc/httpd/conf/httpd.conf LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \" %{User-Agent}i\"" 组合 LogFormat "%h %l %u %t \"%r\" %>s %b" 通用
关于自定义日志格式的详细信息请查看下面的apache官方文档。
http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#formats
LogFormat 的最后一部分表示“组合”或“通用”,称为昵称。
CustomLog中也写入了昵称,即前面介绍的访问日志输出目的地,并且
将具有相同昵称的LogFormat格式输出到访问日志中。
CustomLog“日志/access_log”组合
这个CustomLog有一个昵称组合,所以
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" 组合 LogFormat "%h %l % u %t \"%r\" %>s %b" 常见
以上述LogFormat格式输出访问日志。
事实上,昵称组合格式的访问日志如下所示:
[root@Webserver ~]# less /var/log/httpd/access_log XXX.XXX.XXX.XXX - - [27/Oct/2017:04:44:01 +0000] "GET / HTTP/1.1" 403 4891 " -" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, 如 Gecko) Chrome/61.0.3163.100 Safari/537.36"
接下来,我们编辑/etc/httpd/conf/httpd.conf中的CustomLog和LogFormat描述并查看访问日志。
[root@Webserver ~]# vi /etc/httpd/conf/httpd.conf #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \ "%{User-Agent}i\"" 组合 #LogFormat "%h %l %u %t \"%r\" %>s %b" 通用 LogFormat "%h %l %u %t" 测试 #CustomLog “logs/access_log”结合 CustomLog“logs/access_log”测试
删除LogFormat中的%t后,我们看一下昵称设置为test的访问日志。
输出会是什么?
[root@Webserver ~]# less /var/log/httpd/access_log 200.XXX.XXX.20 - - [27/Oct/2017:05:05:36 +0000]
根据 LogFormat 格式,最多显示 %t“收到请求的时间”。
概括
我研究了 accesslog 的格式,我自己也对此感到好奇。
当我实际编辑httpd.conf,更改显示项目并
检查访问日志时,更容易理解。
就是这样。