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項及其他符合的通配的項。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM