• ngx_http_log_module
    • 指令

    ngx_http_log_module

    扩展日志模块,提供syslog和pipe,以及日志采样。

    开启syslog日志功能需要在编译是添加参数—with-syslog,否则syslog不会生效。

    syslog模块兼容syslogd。使用syslog-ng需要修改配置文件以支持udp和unix-dgram,并屏蔽unix-stream:

    1. source s_sys {
      file ("/proc/kmsg" program_override("kernel: "));
      unix-dgram ("/dev/log");
      internal();
      udp(ip(0.0.0.0) port(514));
      };

    指令

    Syntax: access_log log_target [format [ratio=ratio] [buffer=size]] | offDefault: access_log logs/access.log combined ratio=1Context: http, server, location

    format(含)前面的各参数顺序固定,后面的参数可乱序。此格式兼容nginx原有access_log格式。

    log_target

    兼容以前的log_file参数,并添加下面三种日志类型:

    1. file:/path/to/file
      syslog:facility[:[loglevel][:[target_ip:[target_port] | target_udgram_addr][:ident]]]
      "pipe:/path/to/exec parms"

    ratio

    在buffer参数前,指定tengine以固定的采样率记录日志。例如:ratio=0.0001,那么每经过10000条记录,tengine会记录一条。

    如果需要使用buffer参数而不需要设置日志采样,不能省略此参数,需要设置ratio=1。

    下面介绍下支持的三种log_target:

    • file 与nginx的log_file对应的类型;

    • syslog 支持通过syslog方式记录日志;

    1. facility := auth | authpriv | cron | daemon | ftp | kern | lpr | mail | mark | news | security | syslog
      | user | uucp | local0 | local1 | local2 | local3 | local4 | local5 | local6 | local7

      loglevel := crit | err | error | emerg | panic | alert | warn | warning | info | notice | debug
      loglevel默认值 = info

      target_ip:[target_port]:日志输出目的主机的IP地址和端口,端口默认是UDP(514)。这里syslog只支持UDP协议

      target_udgram_addrunix dgram地址,默认为Unix dgram(/dev/log)。这里syslog只支持UNIX DGRAM协议

      ident: 自定义标志,可以用于应用信息

    例如:

    1. syslog:user:info:127.0.0.1:514:ident user类型和info级别将日志发送给127.0.0.1:514UDP端口,并设置应用标记为ident
      syslog的输出样例:"May 4 15:44:15 local ident[26490]: XXXXXXXX"
      syslog:auth:err:10.232.4.28::ident auth类型和err级别将日志发送到主机10.232.4.28:514UDP端口,并设置应用标记为ident
      syslog:user:info:/dev/log:ident user类型和info级别将日志发送给本机Unix dgram(/dev/log),并设置应用标记为ident
      syslog:user::/dev/log:ident user类型和info级别将日志发送给本机Unix dgram(/dev/log),并设置应用标记为ident
      syslog:user:info::ident user类型和info级别将日志发送给本机Unix dgram(/dev/log),并设置应用标记为ident
      syslog:cron:debug:/dev/log cron类型和debug级别将日志发送到主机Unix dgram(/dev/log),并使用默认标记
      syslog的输出样例:"May 4 15:44:15 local NGINX[26490]: XXXXXXXX"
      syslog:user::127.0.0.1 user类型和info级别将日志发送给127.0.0.1:514UDP端口,并使用默认标记
      syslog:user:debug user类型和debug级别将日志发送给本机Unix dgram(/dev/log),并使用默认标记
      syslog:user user类型和info级别将日志发送给本机Unix dgram(/dev/log),并使用默认标记
    • pipe
      因为pipe命令行中含有空格的缘故,pipe需要使用双引号引用,命令行中的双引号需要转义。

    另外pipe进程的(user, group)遵循tengine指令user的配置,如果没有使用user指令配置的话,pipe进程将遵循tengine的默认用户设置,在编译时没有制定的情况下,默认设置是(nobody, nobody)。请注意给与pipe进程适当的权限。


    Syntax: error_log log_target [debug | info | notice | warn | error | crit]Default: error_log logs/error.logContext: core, http, server, location

    为error_log增加syslog和pipe支持,使用同access_log。


    Syntax: syslog_retry_interval secondsDefault: syslog_retry_interval 1800Context: core

    建立连接失败后,下一次重试的时间间隔,单位:秒。


    Syntax: log_escape on | off | asciiDefault: log_escape onContext: core, http, server, location
    • 'on': access日志里面对特殊字符(除了保留或者非保留字符) 编码。
    • 'off': 对所有的特殊字符都不编码。
    • 'acsii': 只对不可见字符字符进行编码。

    原文: http://tengine.taobao.org/document_cn/http_log_cn.html