nginx的access log问题

806 views
Skip to first unread message

coderesty

unread,
Jul 18, 2014, 1:32:26 AM7/18/14
to openresty
hi, all
 
   问一下, 我想把post的数据打印到access log里面, 然后用$request_body , 但是日志里面的"和汉字都是用十六进制表示的, 如\x22 等, 请问有没有方法直接原样输出到日志中.
 
3q.
 
2014-07-18

coderesty

Yichun Zhang (agentzh)

unread,
Jul 18, 2014, 2:47:32 PM7/18/14
to openresty
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
Reply all
Reply to author
Forward
0 new messages