为了排查线上的bug,需要在nginx的日志中,打印客户端上传上来的header头部信息,同时头部信息是自定义的。在尝试多重方案后,找到解决方法:

log_format json \'{\"@timestamp\":\"$time_iso8601\",\'
                \'\"groupID\":\"$http_groupID\",\'
                \'\"pv\":\"$http_pv\",\'
                \'\"remote_addr\":\"$remote_addr\",\'
                \'\"remote_user\":\"$remote_user\",\'
                \'\"server_name\":\"$host\",\'
                \'\"request\":\"$request\",\'
                \'\"status\":\"$status\",\'
                \'\"bytes\":\"$body_bytes_sent\",\'
                \'\"referer\":\"$http_referer\",\'
                \'\"agent\":\"$http_user_agent\",\'
                \'\"verb\":\"$request_method\",\'
                \'\"x_forwarded\":\"$http_x_forwarded_for\",\'
                \'\"request_time\":\"$request_time\",\'
                \'\"upstream_addr\":\"$upstream_addr\",\'
                \'\"ups_resp_time\":\"$upstream_response_time\"\'
                \'}\';

    access_log  /log/nginx/access.log  json;

通过配置可以看出,可在自定义header字段前加http_,即可将指定的自定义header字段打印到log中。

要注意的是针对nginx 不同版本自定义header 获取方法不同,我的nginx版本是1.12.2

收藏 打印