log4php使用syslog记录日志

2017年4月27日 · 58 字 · 1 分钟

log4php是apache基金会下的一个开源项目,灵活、强大,已经有几个项目使用了log4php处理日志,目前遇到的问题是服务器太多的时候日志如何统一管理,本来想使用数据库存储。但是日志格式成了一个问题,而且不利于扩展,如果临时需要保存到文件,又要更改log4php的配置。 好在log4php提供了syslog的一个appender,可以将日志写入syslog;

log4php配置

log4php.rootLogger=INFO, stdout, stderr
log4php.appender.stdout=LoggerAppenderConsole
log4php.appender.stdout.layout=LoggerLayoutPattern
log4php.appender.stdout.layout.ConversionPattern=%date{Y-m-d H:i:s} [%-5p] %m%n
log4php.appender.stdout.threshold=INFO

log4php.appender.stderr=LoggerAppenderSyslog
log4php.appender.stderr.ident=qun.hk-task
log4php.appender.stderr.priority=ERR
log4php.appender.stderr.facility=LOCAL0
log4php.appender.stderr.layout=LoggerLayoutPattern
log4php.appender.stderr.layout.ConversionPattern=%date{Y-m-d H:i:s} %m%n
log4php.appender.stderr.threshold=WARN

这里使用两个输出目的地,stdout输出到终端,stderr输出到syslod,log4php配置对应rsyslog的配置关系为:

  • ident -> syslog中的tag
  • priority -> syslog中的priority
  • facility -> syslog中的facility,请注意全部为大写

rsyslog配置

rsyslog配置文件一般在 /etc/rsyslog.conf 以及 /etc/rsyslog.d目录下 我们不更改主配置文件,在*/etc/rsyslog.d/*目录下新建文件

vim local0.conf

内容为

local0.* /var/log/local0.log

rsyslog输出可以写成服务器,本文为了测试直接写入文件,有需要的可以根据实际情况进行转发。重启rsyslog

service rsyslog restart

PHP加载配置

<?php
\Logger::configure(__DIR__ . '/log4php.properties');
$logger = \Logger::getLogger('default');
$logger->info('info');
$logger->error('error');

可以看到*/var/log/local0.log中多出一行error*的日志