从nginx 1.7版本开始,access_log日志文件中支持if语句判断。根据这个功能,我们可以根据status值分割nginx日志,正常200的访问记录放一个文件,404或者500等再放另外一个文件。对于后续分析nginx日志可能有用。
语法:
access_log path [format [buffer=size [flush=time]] [if=condition]];
The if parameter (1.7.0) enables conditional logging.
A request will not be logged if the condition evaluates to “0” or an empty string
值是0时,access_log就不会记录日志。具体配置方法如下。
在nginx.conf代码块中添加如下内容:
map $status $status_1 {
~^1 1;
default 0;
}
map $status $status_2 {
~^2 1;
default 0;
}
map $status $status_3 {
~^3 1;
default 0;
}
map $status $status_4 {
~^4 1;
default 0;
}
map $status $status_5 {
~^5 1;
default 0;
}
这个配置的意思 $status
是1开头的时候,就将 $status_1
的值 置为 1,否则默认值为 0,其他依次类推
定义好判断值后,在具体server代码块中添加类似如下:
server {
......
access_log /data/wwwlogs/access_log_status1.log combined if=$status_1;
access_log /data/wwwlogs/access_log_status2.log combined if=$status_2;
access_log /data/wwwlogs/access_log_status3.log combined if=$status_3;
access_log /data/wwwlogs/access_log_status4.log combined if=$status_4;
access_log /data/wwwlogs/access_log_status5.log combined if=$status_5;
}
添加后reload重新载入nginx,可以看到nginx日志已经根据Status返回值正常分割。
有关access_log参数的官方说明,语法如下:
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition];
access_log syslog:server=address[,parameter=value] [format [if=condition]];
buffer=size 为存放日志的缓冲区大小,flush=time 为将缓冲区的日志刷到磁盘的时间,gzip[=level] 表示压缩级别,[if=condition] 表示其他条件,一般场景这些参数都无需配置,极端优化时才可能考虑这些参数。
access_log off中的off,表示不记录访问日志。
如果不指定日志格式就会采用默认的combined格式记录日志。
默认配置:access_log logs/access.log combined;
放置位置在:http, server, location, if in location, limit_except中。
更多操作,可以参考此地址:https://help.aliyun.com/document_detail/41274.html
网友评论