一、在apache中配置日志记录
1. 在conf/httpd.conf中配置对应的日志规则
在该配置文件中,使用 : / 搜索LogFormat。就可以搜索到日志打印的格式设置
...
# 这种是组合日志格式
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>
...
当我们的系统单独设置了不同的端口,需要在不同的端口配置文件中(httpd.conf)分别设置日志格式
httpd.conf_10.221.128.109_8180
httpd.conf_10.221.157.131_8180
注意:conf/extra/httpd-vhosts.conf文件需要首先在httpd.conf中引入,引入方式如下:
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
2. 将对应的虚拟机中添加日志使用配置
在文件conf/extra/httpd-vhosts.conf
中,添加日志的使用
# 对应的端口号
<VirtualHost *:8580>
# 网站文件
DocumentRoot "/opt/app/apache/htdocs/xxx8580"
ServerName localhost
Header set Access-Control-Allow-Origin *
Header set Access-Control-Allow-Credentials true
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
# 添加此项配置
CustomLog "| /opt/app/apache/bin/rotatelogs logs/apg_acs_8580_logs/%Y_%m_%d_assert_log 86400 480" combined
#Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
</VirtualHost>
<VirtualHost *:8480>
DocumentRoot "/opt/app/apache/htdocs/xxx8480"
ServerName localhost
Header set Access-Control-Allow-Origin *
Header set Access-Control-Allow-Credentials true
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
# 添加此项配置
CustomLog "| /opt/app/apache/bin/rotatelogs logs/apg_acs_8480_logs/%Y_%m_%d_assert_log 86400 480" combined
#Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
</VirtualHost>
其中配置 CustomLog
的使用方式:
CustomLog "| /opt/app/apache/bin/rotatelogs logs/apg_acs_8480_logs/%Y_%m_%d_assert_log 86400 480" combined 的意思
CustomLog 日志打印命令
| /opt/app/apache/bin/rotatelogs 通过通道指定日志分割器
logs/apg_acs_8480_logs/%Y_%m_%d_assert_log 日志的打印目录,其中%Y %m %d表示年月日
86400 指定分割时间:86400 默认单位为s。也就是24小时
480 指定分区时差:480 默认单位m,也就是8小时
combined 使用的日志规则,使用在1中定义的规则
3. 修改完配置后
1. 校验配置是否正确
bin/apachectl configtest
2. 重启apache服务后生效
bin/apachectl restart
3. 查看打印出来的日志
在logs/apg_acs_8480_logs
目录下的对应日期日志文件中可以看到相关日志
172.26.3.212 - - [29/Jul/2020:15:47:41 +0800] "GET / HTTP/1.1" 200 387 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
172.26.3.212 - - [29/Jul/2020:15:47:41 +0800] "GET /app.js HTTP/1.1" 200 973218 "http://10.221.157.129:8480/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
172.26.3.212 - - [29/Jul/2020:15:47:43 +0800] "POST /apg-acs/system/indexcode HTTP/1.1" 200 180 "http://10.221.157.129:8480/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
172.26.3.212 - - [29/Jul/2020:15:47:43 +0800] "GET /static/fonts/element-icons.535877f5.woff HTTP/1.1" 200 28181 "http://10.221.157.129:8480/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
172.26.3.212 - - [29/Jul/2020:15:47:43 +0800] "GET /static/img/background.9d8620c8.png HTTP/1.1" 200 563274 "http://10.221.157.129:8480/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
172.26.3.212 - - [29/Jul/2020:15:47:44 +0800] "GET /favicon.ico HTTP/1.1" 200 5030 "http://10.221.157.129:8480/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
172.26.3.212 - - [29/Jul/2020:15:48:07 +0800] "POST /apg-acs/rbac/apg.authentication/v1.1 HTTP/1.1" 200 1217 "http://10.221.157.129:8480/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
172.26.3.212 - - [29/Jul/2020:15:48:21 +0800] "GET /?imageView2/1/w/80/h/80 HTTP/1.1" 200 387 "http://10.221.157.129:8480/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
二、关于日志的规则配置
就以我们上面配置的规则为例
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
%…a: 远程IP地址
%…A: 本地IP地址
%…B: 已发送的字节数,不包含HTTP头
%…b: CLF格式的已发送字节数量,不包含HTTP头。例如当没有发送数据时,写入‘-’而不是0。
%…{FOOBAR}e: 环境变量FOOBAR的内容
%…f: 文件名字
%…h: 客户端主机ip
%…H 请求的协议
%…{Foobar}i: Foobar的内容,发送给服务器的请求的标头行。
%…l: 远程登录名字(来自identd,如提供的话)
%…m 请求的方法 %…{Foobar}n: 来自另外一个模块的注解“Foobar”的内容
%…{Foobar}o: Foobar的内容,应答的标头行
%…p: 服务器响应请求时使用的端口
%…P: 响应请求的子进程ID。
%…q 查询字符串(如果存在查询字符串,则包含“?”后面的部分;否则,它是一个空字符串。)
%…r: 请求的第一行 %…s: 状态。对于进行内部重定向的请求,这是指原来请求 的状态。如果用%…>s,则是指后来的请求。
%…t: 以公共日志时间格式表示的时间(或称为标准英文格式)
%…{format}t: 以指定格式format表示的时间
%…T: 为响应请求而耗费的时间,以秒计
%…u: 远程用户(来自auth;如果返回状态(%s)是401则可能是伪造的)
%…U: 用户所请求的URL路径
%…v: 响应请求的服务器的ServerName
%…V: 依照UseCanonicalName设置得到的服务器名字
{Referer}是链接到此URL的页面
{User-Agent} 是浏览器标识字符串
三、日志过滤
可以根据不同的请求将日志进行过滤,比如根据url 请求端ip等存储到不同的文件里
配置方式一:
直接在httpd.conf文件中配置:
以下是过滤一些图片等文件的请求
<IfModule log_config_module>
LogFormat "%h %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
<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>
<FilesMatch "\.(ico|gif|jpg|png|swf|css|js)">
SetEnv IMAG 1
</FilesMatch>
# 不让含有图片的请求写入日志中
CustomLog logs/access.log common env=!IMAG
</IfModule>
配置方式二:
在conf/extra/httpd-vhosts.conf配置文件中配置如下:
<VirtualHost *:8480>
DocumentRoot "/opt/app/apache/htdocs/apg-acs-8480"
ServerName localhost
Header set Access-Control-Allow-Origin *
Header set Access-Control-Allow-Credentials true
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
# CustomLog "logs/apg_acs_8480_logs/assert_log" combined
# 配置关键 设置环境变量
SetEnvIf Request_URI ^/webMonitor\/.* webMonitor
# 在正常文件中过滤掉该条件的日志
CustomLog "| /opt/app/apache/bin/rotatelogs logs/apg_acs_8480_logs/%Y_%m_%d_assert_log 86400 480" combined env=!webMonitor
# 当env满足条件时,就记录日志到某个文件中
CustomLog "| /opt/app/apache/bin/rotatelogs logs/apg_acs_8480_logs/%Y_%m_%d_monitor_log 86400 480" combined env=webMonitor
#Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
</VirtualHost>