作者:博菡 | 来源:互联网 | 2023-06-30 06:48
使用php的syslog()函数调用本地的syslog服务,我的环境是ubuntu,所以记录下ubuntu下syslog的使用有关配置方法参考文章:http:www.cnblogs.com
使用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,根据facility和priority对应的关系,对应的消息类型规则是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项及其他符合的通配的项。