nginx第二篇:在日志中打印请求体和响应
nginx默认是不在access.log中打印请求体的,需要自定义配置。使用nginx自带的request_body变量即可,这样经proxy_pass转发的请求,就能在日志中打印出请求体了。但是中文会被转义,可以使用log_escape_non_ascii取消转义。但是请求体中的双引号会被转义成\x22,无法解决,只能在查看时做替换。
log_format main '$remote_addr [$time_local] "$request" "$request_body" '
'$request_time $request_length '
'$status $body_bytes_sent "$http_referer" '
'request_time:$request_time '
'upstream_response_time:$upstream_response_time '
'"$http_user_agent" ';
log_escape_non_ascii off;
如果想把日志打印成json,可以自定义日志格式如下:
log_format json_log escape=json '{"realip":"$remote_addr","@timestamp":"$time_iso8601","host":"$http_host","request":"$request","req_body":"$request_body","status":"$status","size":$body_bytes_sent,"ua":"$http_user_agent","cookie":"$http_cookie","req_time":"$request_time","uri":"$uri","referer":"$http_referer","xff":"$http_x_forwarded_for","ups_status":"$upstream_status","ups_addr":"$upstream_addr","ups_time":"$upstream_response_time"}';
浙公网安备 33010602011771号