从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 $normal {
~^2 1;
default 0;
}
map $status $abnormal {
~^2 0;
default 1;
}
map $remote_addr $islocal {
~^127 1;
default 0;
}
这个配置的意思大概是status值2开头的都正常,其他都是不正常访问。如果remote_addr是127,那么说明是本地内部调用。
定义好判断值后,在具体server代码块中添加类似如下:
server {
access_log logs/access.log combined if=$normal;
access_log logs/access_abnormal.log combined if=$abnormal;
access_log logs/access_local.log combined if=$islocal;
}
添加后reload重新载入nginx,可以看到nginx日志已经根据Status返回值正常分割。
如果nginx版本不对,请先升级nginx,具体升级方法可以参考这篇文章。
http://blog.nbqykj.cn/?p=2778.html
正文完
微信搜一搜“奇悦电脑科技”或扫描二维码关注我们
