nginx中是否可以有多行日志?
我正在向nginx服务器发送日志,并希望将这些日志转储到一个文件中。当一次发送一个日志时,我可以使用NginXechodule强制nginx读取正文,如下所示:nginx中是否可以有多行日志?,nginx,Nginx,我正在向nginx服务器发送日志,并希望将这些日志转储到一个文件中。当一次发送一个日志时,我可以使用NginXechodule强制nginx读取正文,如下所示: http { log_format log_dump '$request_body'; server { listen 80 default_server; listen [::]:80 default_server; access_log /logs/dump log_d
http {
log_format log_dump '$request_body';
server {
listen 80 default_server;
listen [::]:80 default_server;
access_log /logs/dump log_dump;
location /logs {
echo_read_request_body;
}
}
}
当我一次只发送一个日志时,这可以正常工作:
POST /logs HTTP/1.1
Host: www.example.com
123456 index.html was accessed by 127.0.0.1
POST /logs HTTP/1.1
Host: www.example.com
123457 favicon.ico was accessed by 127.0.0.1
但是,当我尝试批处理日志时(为了避免连接开销和HTTP头开销):
以下是我的日志文件中显示的内容:
123456 index.html was accessed by 127.0.0.1\x0A123457 favicon.ico was accessed by 127.0.0.1
现在我的假设是,因为一个nginx日志行的目的是一行,所以它对我的新行字符进行编码以确保这一点。有没有办法允许多行nginx日志?这次我从一位经验丰富的工程师那里得到了答案:
log_format log_dump escape=none '$request_body';
,但防止nginx转义日志中的新行:
$> curl http://localhost/logs -d "Words
dquote> More words"
$> cat /logs/dump
Words
More words
$>
$> curl http://localhost/logs -d "Words
dquote> More words"
$> cat /logs/dump
Words
More words
$>