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。多个规则用;分割