在access_log中仅记录4xx和5xx日志 - Nginx 1.5.12.1

时间:2015-09-13 23:07:04

标签: linux nginx

我有nginx版本:openresty / 1.5.12.1。

有没有办法只将4xx和5xx日志记录到access_log或其他access_log文件?

我的意思是,这些日志应该在默认的access_log文件中。此外,它们也应该记录在自定义日志文件中。 仅记录4xx和5xx也很好。

谢谢!

3 个答案:

答案 0 :(得分:0)

在没有编辑源代码或编写Nginx第三方模块的情况下,他们无法做到这一点(据我所知和已经看过)。

为什么不通过grep等运行日志?

一个很棒的小日志解析教程可以帮助你: https://rtcamp.com/tutorials/nginx/log-parsing/

答案 1 :(得分:0)

grep" 404" access.log | sed -e' s /。 GET //' -e' s / \。 //' |排序| uniq -c | sort -n | gawk' {print $ 2"," $ 1}'

答案 2 :(得分:0)

否,nginx 1.5.x似乎没有这种可能。

是的,从nginx 1.7.0(http://nginx.org/en/docs/http/ngx_http_log_module.html#access_log)开始,可以在nginx.conf文件中执行此操作:

nginx access_log directive 'if' parameter

来自https://docs.nginx.com/nginx/admin-guide/monitoring/logging/#conditional

<header>

这将跳过记录所有2xx和3xx状态代码。您可以重写此代码以肯定地选择4xx和5xx状态代码(尽管它们在很大程度上是等效的,除非您返回大量的1xx状态代码或返回非标准的> 599状态代码,这很奇怪):

map $status $loggable {
    ~^[23]  0;
    default 1;
}

access_log /path/to/access.log combined if=$loggable;