代码之家  ›  专栏  ›  技术社区  ›  stevendesu

可以在nginx中进行多行登录吗?

  •  0
  • stevendesu  · 技术社区  · 7 年前

    我正在将日志发送到nginx服务器,并希望将这些日志转储到一个文件中。每次发送一个日志时,我可以使用nginxechomodule强制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头开销):

    POST /logs HTTP/1.1
    Host: www.example.com
    
    123456 index.html was accessed by 127.0.0.1
    123457 favicon.ico was accessed by 127.0.0.1
    

    这是我的日志文件中显示的内容:

    123456 index.html was accessed by 127.0.0.1\x0A123457 favicon.ico was accessed by 127.0.0.1
    

    现在我的假设是,因为一个nginx日志行 一行 ,它正在对我的新行字符进行编码以确保这一点。有允许多行nginx日志的方法吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   stevendesu    7 年前

    实际上,这次我的工作中有一位经验更丰富的工程师给出了答案:

    log_format log_dump escape=none '$request_body';
    

    This requires nginx version 1.13.10 ,但阻止nginx转义日志中的新行:

    $> curl http://localhost/logs -d "Words
    dquote> More words"
    $> cat /logs/dump
    Words
    More words
    $>