nginx logging $request_body as hexadecimal nginx logging $request_body as hexadecimal json json

nginx logging $request_body as hexadecimal


Sinse 1.13 there is an "escape=none" parameter that turns off data escaping.

http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format

log_format  api_request_log escape=none '[$time_local] $request \n$request_body';


You can't stop from escaping it and will have to post process it.

Python2 example:

line = '{\x22id\x22:\x22user id\x22}'line.decode('unicode_escape')>> u'{"id":"user id"}'

Python3 example:

line = '{\x22id\x22:\x22user id\x22}'bytes(line, 'utf-8').decode('unicode_escape')>> '{"id":"user id"}'

Ruby example (from https://stackoverflow.com/a/18752208/2398354):

require 'yaml'line = '{\x22id\x22:\x22user id\x22}'YAML.load(%Q(---\n"#{line}"\n))=> "{\"id\":\"user id\"}"

Note: This last example is useful if post processing a file with logstash


Hope this will be helpful for someone.In order to log entire json request unescaped.Do add in http block this configuration

http { log_format postdata escape=json $request_body; access_log /var/log/nginx/access.log postdata; .....}