PEAR LOG日记系统
PEAR LOG日志系统
在健壮的软件体系里面,日志扮演着十分重要的角色。日志系统设计的好坏,直接影响到软件运行的可靠性。PEAR的LOG是一个小巧实用的日志系统,可以将日志记录到文件、数据库、系统日志,或输出到控制台。
日志内容:
简单的例子
include 'Log.php'; $log = Log::singleton("file" , HOME_DIR.'/var/logs/feedbowl.log'); $log->debug("check it out"); $log->warning("you have a emergency"); $log->err("something terrible happened"); $log->info("再见");
记录的日志内容:
Jan 15 16:42:05 [debug] check it out
Jan 15 16:42:05 [warning] you have a emergency
Jan 15 16:42:05 [error] something terrible happened
Jan 15 16:42:05 [info] 再见
高级用法
完整的singleton
object Log singleton( string $handler, [string $name = ''], [string $ident = ''], [array $conf = array()], [int $level = PEAR_LOG_DEBUG])
string | $handler | — | 日志保存类型,可选择 'console', 'syslog', 'sql', 'file', and 'mcal'. |
string | $name | — | 保存位置,文件日志路径,或者数据表名称,或指定其他位置。默认位置取决于选择哪种日志类型。 |
string | $ident | — | 日志签名,可以理解为分类 |
array | $conf | — | 其他设置,用关联数组表示 |
int | $level | — | 记录的级别,只记录不低于这个级别的事件,默认是PEAR_LOG_DEBUG。其他级别从低到高有:PEAR_LOG_NONE,
PEAR_LOG_ALERT, PEAR_LOG_EMERG |
日志级别
在开发阶段,可以把级别设置为PEAR_LOG_DEBUG,在产品阶段再调为PEAR_LOG_INFO,则所有Log::debug()将被忽略。
文件锁
在并行环境中(如web访问),可能有多个线程同时请求日志写操作,可能破坏内容的格式。将$conf[ 'locking' ]设置为1,则一个时间只有一个线程可以写日志,其他线程进入阻塞等待。
自动截断
PEAR LOG不支持rotating,如果选的是文件日志,只好自己动手去做日志截断。在开启了$conf['locking']的情况下,不建议通过系统命令去截断日志文件。我们可以用当前日期作为日志保存路径,例如,将一周的日志放在一个文件里
$logfile = 'logs/mylog-'.date('YW', time());
完整代码
include 'Log.php'; $logfile = HOME_DIR. '/var/logs/feedbowl-'.date( 'YW' , time()).'.log' ; $conf = array( 'locking' => 1 ); $log = Log:: singleton("file" , $logfile, 'DEMO', $conf, PEAR_LOG_INFO); $log->debug( "check it out"); $log->warning( "you have a emergency"); $log->err( "something terrible happened"); $log->info( "再见");
日志内容:
Jan 15 18:09:15 DEMO [warning] you have a emergency
Jan 15 18:09:15 DEMO [error] something terrible happened
Jan 15 18:09:15 DEMO [info] 再见