nginx.conf中的log_format被忽略

dan*_*y74 6 nginx

总NGINX初学者在这里.

我的日志目前看起来像:

92.21.236.47 - - [08/Jan/2017:00:48:10 +0000]"GET/HTTP/1.1"200 148" - ""Mozilla/5.0(Windows NT 10.0; WOW64; rv:50.0)Gecko/20100101火狐/ 50.0"

当我在默认的/etc/nginx/nginx.conf中添加以下行时

log_format main '$remote_addr - $remote_user xxx[$time_local]xxx '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent"';

access_log /var/log/nginx/access.log; 
error_log /var/log/nginx/error.log;
Run Code Online (Sandbox Code Playgroud)

(access_log和error_log行已存在于默认配置中,我将这些仅用于上下文).

然后我重启NGINX:

systemctl restart nginx
Run Code Online (Sandbox Code Playgroud)

我现在希望我的日志能够改变,特别是显示使用的xxx文字值.. xxx [$ time_local] xxx ..但我的改变没有任何区别.

如果我将log_format main更改为log_format组合,则服务器将不会重新启动.

dan*_*y74 18

改变..

access_log /var/log/nginx/access.log;
Run Code Online (Sandbox Code Playgroud)

至 ..

access_log /var/log/nginx/access.log main;
Run Code Online (Sandbox Code Playgroud)

固定它.

其中main是log_format的名称,如...所定义.

log_format main '$remote_addr - $remote_user xxx[$time_local]xxx '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent"';
Run Code Online (Sandbox Code Playgroud)

  • 完全一样的问题,同样的解决方法:如果**name**参数设置在log_format中,你必须把它给log_format (2认同)

yub*_*del 13

回复晚了,但对于那些仍然在这个问题中徘徊的人来说可能有用。

编写log_format外部指令server {}

整个代码是这样的

log_format main '$remote_addr - $remote_user xxx[$time_local]xxx '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent"';
server {
      listen 80;
      access_log /var/log/nginx/<your_domain>_access.log main; 
}
Run Code Online (Sandbox Code Playgroud)

这里的 main 表示 nginx 在写入日志时应该包含哪些字段。

有关更多详细信息,请查看官方文档 Sampling Requests with NGINX Conditional Logging

  • 的确。此外,本文档告诉上下文接受 `log_format` 的位置(仅 http):https://nginx.org/en/docs/http/ngx_http_log_module.html (2认同)