根据status值分割nginx日志

2021-12-21  本文已影响0人  码农工号9527

从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

上一篇下一篇

猜你喜欢

热点阅读