php和syslog

时间:2021-11-20 22:00:46

syslog是Linux系统默认的日志守护进程。使用syslog可以方便把指定的事件写入特定文件中,可以让任何事件都登录到一台或多台服务器上。

1、简单例子,先说一下syslog怎么使用,以php为例

<?php

//为应用打开一个系统日志连接, openlog是可选的,如果需要,会被sysylog会自动调用
openlog("log test", LOG_PID | LOG_PERROR, LOG_LOCAL0); syslog(LOG_INFO, " this is a log message"); //关闭系统日志链接 closelog()是可选的 成功时返回 TRUE, 或者在失败时返回 FALSE。
closelog();

然后在命令行查看syslog,如果是centos默认应该是 tail -f /var/log/message

tail -f /var/log/syslog

然后运行php便会看到再sysylog中记录了一条记录

Aug   :: mint17 log test[]:  this is a log message

上面便是一个简单的例子,将php的日记记录到了sysylog中。其中openlog和closelog并不是必须调用的。直接运行syslog(LOG_INFO, " this is a log message");也是可以的。

2、php参数说明

openlog成功返回true  失败返回false,参数如下:

//字符串ident,会被添加到每一个消息。比如上面例子中的 log test
//option 产生日志消息时使用的日志选项。 上面的例子中我们采用了LOG_PID和LOG_PERROR 可选值:
// LOG_CONS if there is an error while sending data to the system logger, write directly to the system console
// LOG_NDELAY open the connection to the logger immediately
// LOG_ODELAY (default) delay opening the connection until the first message is logged
// LOG_PERROR print log message also to standard error
// LOG_PID include PID with each message
//facility 用于标明记录日志的程序是什么 上面的例子中我们用的LOG_LOCAL0
// LOG_AUTH security/authorization messages (use LOG_AUTHPRIV instead in systems where that constant is defined)
// LOG_AUTHPRIV security/authorization messages (private)
// LOG_CRON clock daemon (cron and at)
// LOG_DAEMON other system daemons
// LOG_KERN kernel messages
// LOG_LOCAL0 ... LOG_LOCAL7 reserved for local use, these are not available in Windows
// LOG_LPR line printer subsystem
// LOG_MAIL mail subsystem
// LOG_NEWS USENET news subsystem
// LOG_SYSLOG messages generated internally by syslogd
// LOG_USER generic user-level messages
// LOG_UUCP UUCP subsystem
bool openlog ( string $ident , int $option , int $facility )

3、syslog的配置

syslog的配置由3项组成,格式为:

 facility.level    action

其中facility 便对应phpopenlog中的facility参数,应用程序多采用local0----local7,其他取值,比如user用于用户进程 mail 用于邮件等不再累述。

level则是对应syslog(LOG_INFO, " this is a log message");中的第一个参数。

action便是对应的日志存储路径。

举例:

local0.*                      /var/log/test.log
local0.notice /var/log/abc.log

在上面的例子中,所有local0应用产生的信息都会被记录到/var/log/test.log。但是其中的notice会被记录到/var/log/abc.log。请注意的是notice类型的信息在/var/log/test.log和/var/log/abc.log都存在。所以一条日志在这里是可以被分发好多份。我们可以把所有的日志记录到某个文件,把错误信息、调试信息单独记录到某个文件,也可以把他们记录到另一台服务器,比如

*.err    @192.168.0.1

表示把所有的错误发送到192.168.0.1这个服务器,默认端口514。

*.err    /dev/console

表示把所有的错误输出到控制台。

*.info;mail.* /var/log/messages

表示把所有的info日志,和mail应用的所有日志记录到/var/log/messages。多个规则用;分割