php和syslog

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  5 17:09:10 mint17 log test[112835]:  this is a log message

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

2、php参数说明

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

//字符串ident,会被添加到每一个消息。比如上面例子中的 log test
//option 产生日志消息时使用的日志选项。 上面的例子中我们采用了LOG_PIDLOG_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。多个规则用;分割

 

posted @ 2016-08-05 17:42  coder5  阅读(634)  评论(0编辑  收藏  举报