[+]文章目录
ngx_http_log_module

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

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

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

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]] | off
Default: access_log logs/access.log combined ratio=1
Context: http, server, location

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

  • log_target
    兼容以前的log_file参数,并添加下面三种日志类型:
    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方式记录日志;
    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_addr:unix dgram地址,默认为Unix dgram(/dev/log)。这里syslog只支持UNIX DGRAM协议
    
        ident: 自定义标志,可以用于应用信息
    例如:
    syslog:user:info:127.0.0.1:514:ident          以user类型和info级别将日志发送给127.0.0.1:514的UDP端口,并设置应用标记为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:514的UDP端口,并设置应用标记为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:514的UDP端口,并使用默认标记
        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进程适当的权限。 'on': access日志里面对特殊字符(除了保留或者非保留字符) 编码。
  • 'off': 对所有的特殊字符都不编码。
  • 'acsii': 只对不可见字符字符进行编码。

« 前一篇