1. 首页
  2. 系统运维
  3. Linux

Nginx根据Status返回值分开保存日志的方法

从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,具体升级方法可以参考这篇文章。

190758dooo0qcukzka3ffn

联系我们

0574-55011290

QQ:248687950

邮件:admin@nbhao.org

工作时间:周一至周五,9:00-18:00,节假日休息

QR code