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

我正在向nginx服务器发送日志,并希望将这些日志转储到一个文件中。当一次发送一个日志时,我可以使用NginXechodule强制nginx读取正文,如下所示:

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
$>