代码之家  ›  专栏  ›  技术社区  ›  endo.anaconda

如何在nginx中将日志文件传输到python

  •  1
  • endo.anaconda  · 技术社区  · 7 年前

    如何将nginx日志输出通过管道传输到python脚本,而不首先将其保存在日志文件中。
    目前,我使用apache,在那里我将其管道化如下:

    CustomLog "|/path/to/script.py"
    

    在nginx中,日志文件的配置类似于下面的代码,现在我需要通过管道将其传输到python脚本

    # Nginx access file:
    $InputFileName /var/log/nginx/access.log
    $InputFileTag nginx-access:
    $InputFileStateFile stat-nginx-access
    $InputFileSeverity info
    $InputFilePersistStateInterval 20000
    $InputRunFileMonitor
    
    #Nginx Error file: 
    $InputFileName /var/log/nginx/error.log
    $InputFileTag nginx-error:
    $InputFileStateFile stat-nginx-error
    $InputFileSeverity error
    $InputFilePersistStateInterval 20000
    $InputRunFileMonitor
    
    1 回复  |  直到 7 年前
        1
  •  -1
  •   endo.anaconda    7 年前

    感谢nginx IRC频道,我找到了一个合适的解决方案,我想为下一个有同样问题的人分享。

    http {
      #(...)
    
    
      map $remote_addr $anon_remote_addr {
        "~^(?<ip_a>\d+\.\d+)\.\d+\.\d+" "$ip_a";
      }
      log_format combined_anon '$anon_remote_addr.0.0 - $remote_user [$time_local] '
                               '"$request" $status $body_bytes_sent '
                               '"$http_referer" "$http_user_agent"';
      # Set it globally
      access_log /var/log/nginx/access.log combined_anon;
    
    
      #(...)
    }
    

    代码段来自: https://gist.github.com/fluential/e2b4ceea628ead5162f0