我有nginx版本:openresty / 1.5.12.1。
有没有办法只将4xx和5xx日志记录到access_log或其他access_log文件?
我的意思是,这些日志应该在默认的access_log文件中。此外,它们也应该记录在自定义日志文件中。 仅记录4xx和5xx也很好。
谢谢!
答案 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文件中执行此操作:
来自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;