Hello!
2014-07-17 22:32 GMT-07:00 coderesty:
> 问一下, 我想把post的数据打印到access log里面, 然后用$request_body , 但是日志里面的"和汉字都是用十六进制表示的,
> 如\x22 等, 请问有没有方法直接原样输出到日志中.
>
对双引号(")进行转义是重要的,毕竟 nginx 访问日志模版中一般使用双引号来作分隔符,例如
log_format combined '$remote_addr - $remote_user [$time_local]
"$request" $status';
如果不转义的话,访问日志解析器很可能无法正确识别对应字段的边界,造成错误。
对于非 ASCII 字节,比如构成汉字的 UTF-8 编码下的字节,其自动转义的行为可以通过下面这条配置指令禁掉:
log_escape_non_ascii off;
注意,这里你需要使用 OpenResty 自带的 nginx. 否则的话,你需要自己给你的 nginx 核心打上下面这个补丁:
https://github.com/openresty/ngx_openresty/blob/master/patches/nginx-1.7.3-log_escape_non_ascii.patch
Regards,
-agentzh