• php syslog记录系统日志


    使用php的syslog()函数调用本地的syslog服务,我的环境是ubuntu,所以记录下ubuntu下syslog的使用有关配置方法

    参考文章:

    http://www.cnblogs.com/wangkangluo1/archive/2012/05/30/2526011.html

    http://blog.csdn.net/xinguan1267/article/details/7078481

    首先写一个php测试文件

    1 <?php
    2 $ident = 'test';
    3 $facility = LOG_LOCAL4;
    4 $priority = LOG_INFO;
    5 define_syslog_variables();
    6 openlog($ident,NULL,$facility);
    7 syslog($priority,'syslog test message generated in php programs');
    8 closelog();

    结果会在/var/log/syslog文件中增加如下一条记录。(默认的配置是会写到syslog文件中),php的openlog()和syslog()函数用法可以查看php手删,

    openlog ( string $ident , int $option , int $facility )

    syslog ( int $priority , string $message )

    这里的facility和priority对应本地syslog服务的”消息来源“(facility)和”紧急程度“(priority),下面会讲到,这两参数通过syslog的配置文件决定log写入到哪个文件中。

    这里讲下服务器端的syslog的使用。

    ubuntu中syslog文件为/etc/rsyslog.conf,查看文件发现所有/etc/rsyslog.d文件夹下的.conf文件都属于配置文件,默认有两个文件,如下图:

    20-ufw.conf 配置的是防火墙log

    50-default.conf 则是其他默认的log配置,我的配置如下所示,截出其中一部分

     1 local4.info            /var/log/test.log
     2 *.info          /var/log/message
     3 auth,authpriv.*         /var/log/auth.log
     4 *.*;auth,authpriv.none      -/var/log/syslog
     5 #cron.*             /var/log/cron.log
     6 #daemon.*           -/var/log/daemon.log
     7 kern.*              -/var/log/kern.log
     8 #lpr.*              -/var/log/lpr.log
     9 mail.*              -/var/log/mail.log
    10 #user.*             -/var/log/user.log
    11 
    12 #
    13 # Logging for the mail system.  Split it up so that
    14 # it is easy to write scripts to parse these files.
    15 #
    16 #mail.info          -/var/log/mail.info
    17 #mail.warn          -/var/log/mail.warn
    18 mail.err            /var/log/mail.err
    19  
    20 #
    21 # Logging for INN news system.
    22 #
    23 news.crit           /var/log/news/news.crit
    24 news.err            /var/log/news/news.err
    25 news.notice         -/var/log/news/news.notice

    第一行配置的就是刚刚那个php测试例子的,这样会将log写入到/var/log/test.log中,同时syslog文件中也会存在.

    看下配置文件的语法格式

    [消息类型(规则)]     [处理方案(日记文件)]     

    注意:两者之间必须用一个或多外tab符分隔,如:local4.* (这里是一个或多个tab符)/var/log/test.log

    消息类型是由”消息来源“(facility)和”紧急程度“(priority)构成,中间点号连接。

    如前面syslog.conf文件中的news.crit表示来自news的”关键“状况。这里,news表示消息来源,crit表示关键状况。通配符*表示一切消息来源,如第二条规则:*.info,将info级以上(notice,warning, err, alert, emerg)(priority表)的所有消息发送到日记文件/var/log/messages。而测试程序中,调用syslog函数时指定的priority是LOG_INFO,facility是LOG_LOCAL4,根据facilitypriority对应的关系,对应的消息类型规则是local4.info,包含在第一条规则中,所以会写到/var/log/test.log文件中,同时因为符合*.info规则和*.*规则(*.*为匹配所有规则),所以同时还会写到syslog和message文件中。

    下面列出facility和priority的对应关系:/usr/include/i386-linux-gun/sys/syslog.h文件中查看

    syslog支持的facility如下:facility参数通常在openlog()中设置,如测试的openlog($ident,NULL,'LOG_LOCAL4');

    /* facility codes */
     93 #define LOG_KERN    (0<<3)  /* kernel messages */
     94 #define LOG_USER    (1<<3)  /* random user-level messages */
     95 #define LOG_MAIL    (2<<3)  /* mail system */
     96 #define LOG_DAEMON  (3<<3)  /* system daemons */
     97 #define LOG_AUTH    (4<<3)  /* security/authorization messages */
     98 #define LOG_SYSLOG  (5<<3)  /* messages generated internally by syslogd */
     99 #define LOG_LPR     (6<<3)  /* line printer subsystem */
    100 #define LOG_NEWS    (7<<3)  /* network news subsystem */
    101 #define LOG_UUCP    (8<<3)  /* UUCP subsystem */
    102 #define LOG_CRON    (9<<3)  /* clock daemon */
    103 #define LOG_AUTHPRIV    (10<<3) /* security/authorization messages (private) */
    104 #define LOG_FTP     (11<<3) /* ftp daemon */
    105 
    106     /* other codes through 15 reserved for system use */
    107 #define LOG_LOCAL0  (16<<3) /* reserved for local use */
    108 #define LOG_LOCAL1  (17<<3) /* reserved for local use */
    109 #define LOG_LOCAL2  (18<<3) /* reserved for local use */
    110 #define LOG_LOCAL3  (19<<3) /* reserved for local use */
    111 #define LOG_LOCAL4  (20<<3) /* reserved for local use */
    112 #define LOG_LOCAL5  (21<<3) /* reserved for local use */
    113 #define LOG_LOCAL6  (22<<3) /* reserved for local use */
    114 #define LOG_LOCAL7  (23<<3) /* reserved for local use */
    115 
    116 #define LOG_NFACILITIES 24  /* current number of facilities */
    117 #define LOG_FACMASK 0x03f8  /* mask to extract facility part */
    118                 /* facility of pri */
    119 #define LOG_FAC(p)  (((p) & LOG_FACMASK) >> 3)

    facility的ID(上面对应的数值)与名字的对应关系如下:

    122 CODE facilitynames[] =
    123   {
    124     { "auth", LOG_AUTH },
    125     { "authpriv", LOG_AUTHPRIV },
    126     { "cron", LOG_CRON },
    127     { "daemon", LOG_DAEMON },
    128     { "ftp", LOG_FTP },
    129     { "kern", LOG_KERN },
    130     { "lpr", LOG_LPR },
    131     { "mail", LOG_MAIL },
    132     { "mark", INTERNAL_MARK },      /* INTERNAL */
    133     { "news", LOG_NEWS },
    134     { "security", LOG_AUTH },       /* DEPRECATED */
    135     { "syslog", LOG_SYSLOG },
    136     { "user", LOG_USER },
    137     { "uucp", LOG_UUCP },
    138     { "local0", LOG_LOCAL0 },
    139     { "local1", LOG_LOCAL1 },
    140     { "local2", LOG_LOCAL2 },
    141     { "local3", LOG_LOCAL3 },
    142     { "local4", LOG_LOCAL4 },
    143     { "local5", LOG_LOCAL5 },
    144     { "local6", LOG_LOCAL6 },
    145     { "local7", LOG_LOCAL7 },
    146     { NULL, -1 }
    147   };

    这个对应关系作用是是将syslog系统调用中facility ID和syslog的配置文件(50-default.conf)选项对应起来。facility的作用是指明调用syslog应用的类型。

    syslog支持的priority如下:

     51 #define LOG_EMERG   0   /* system is unusable */
     52 #define LOG_ALERT   1   /* action must be taken immediately */
     53 #define LOG_CRIT    2   /* critical conditions */
     54 #define LOG_ERR     3   /* error conditions */
     55 #define LOG_WARNING 4   /* warning conditions */
     56 #define LOG_NOTICE  5   /* normal but significant condition */
     57 #define LOG_INFO    6   /* informational */
     58 #define LOG_DEBUG   7   /* debug-level messages */

    priority的ID(上面对应的数值)与名字的对应关系如下:

     74 CODE prioritynames[] =
     75   {
     76     { "alert", LOG_ALERT },
     77     { "crit", LOG_CRIT },
     78     { "debug", LOG_DEBUG },
     79     { "emerg", LOG_EMERG },
     80     { "err", LOG_ERR },
     81     { "error", LOG_ERR },       /* DEPRECATED */
     82     { "info", LOG_INFO },
     83     { "none", INTERNAL_NOPRI },     /* INTERNAL */
     84     { "notice", LOG_NOTICE },
     85     { "panic", LOG_EMERG },     /* DEPRECATED */
     86     { "warn", LOG_WARNING },        /* DEPRECATED */
     87     { "warning", LOG_WARNING },
     88     { NULL, -1 }
     89   };

    priority的作用是指明日记记录的优先级,也可以理解成记录时间的严重程度。在实际使用中,syslog函数中的priority参数实际上是前面提到的facility和priority的组合,通过与操作。

    通过上面列出的对应关系,我们可以看出测试程序中使用的facility和priority对应的是配置文件中的local4.info项及其他符合的通配的项。

  • 相关阅读:
    Raid5 Raid10性能测试
    MetaData_model_package
    UBoot命令说明
    ubuntu 12.10 配置一个Apache+MySQL+phpMyAdmin环境
    SSH服务器
    VC2008使用boost库方式
    嵌入式Web服务器BOA移植
    利用matlab将数据写入指定列的方法
    error LNK2019: 无法解析的外部符号,解决办法
    在CYGWIN下编译和运行软件Bundler ,以及PMVS,CMVS的编译与使用
  • 原文地址:https://www.cnblogs.com/wuheping/p/2954075.html
Copyright © 2020-2023  润新知