【发布时间】:2015-05-20 22:32:13
【问题描述】:
我正在尝试将请求的请求正文记录到我的 api,而 nginx 正在将所有引号(以及一些其他字符,如空格和制表符)转换为十六进制字符。
这是我的日志格式
log_format postdata '{"ts": "$time_iso8601", "status": $status, "req": "$uri", "meth": "$request_method", "body": "$request_body"}';
这是记录的内容
{"ts": "2015-05-20T15:31:11-07:00", "status": 400, "req": "/v2/track", "meth": "POST", "body": {\x22id\x22:\x22user id\x22}}
我怎样才能防止这种情况,以便生成的日志行是
{"ts": "2015-05-20T15:31:11-07:00", "status": 400, "req": "/v2/track", "meth": "POST", "body": {"id":"user id"}}
【问题讨论】:
-
你不能。它在 nginx 的日志模块中进行了编码。但是,如果您在周围加上引号(就像您以日志格式显示,但不是以实际结果显示),它将是有效的 js 字符串,您可以在
JSON.parse中使用它 -
好吧,如果你使用非 ascii,实际上是无效的,但是 nginx 的日志模块是在 JSON 流行甚至存在之前很久就编写的
-
可以找到对这种行为有一点了解的相关问题here
-
嗨@tbeauvais,现在这个问题有了真正的解决方案——请接受。请参阅 Grigori Kochanov 的答案。