写了一款php日志系统——plog

p(date). 2010-12-06

日志是一个应用程序的重要组成部分,今天在看pylons对日志的处理时,受到启发,于是plog就诞生了。

很多php框架都忽略了日志的重要性(如kohana),往往只是能用,自定义和可扩展性不够,等到程序出了问题,再想找原因时就比较麻烦了。

plog简介

plog是一款轻量级,易定制,易使用,易扩展的php日志系统。可以很方便地添加日志处理工具、自定义输出格式、自定义日志类型等等。

plog使用

使用plog很简单,在每个要加日志的文件里,输入以下代码

<?php
// 载入plog类
require '../../plog/classes/plog.php';

// 设置config,config文件位置可以自定义
// 对于单入口文件,这两段代码可以放在入口文件处
Plog::set_config(include 'path/to/config.php');

// 把下面这段代码放到对应的文件里
$log = Plog::factory(__FILE__);

// 使用
$log->debug('this is debug message');
$log->info('this is info message');

plog的配置

plog的配置很灵活,下面是个demo config

<?php
return array(
	// 设置日志的类型,如有些是系统日志,有些是应用日志
	'loggers' => array(
		// base是个特殊变量,会自动添加到其他配置的前面
		'base' => dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'demo'.DIRECTORY_SEPARATOR,
		'system' => 'system', // key为日志类型,value为文件夹路径,base路径会被自动添加
		'app' => 'app' // 同上
	),
	// 日志的等级
	'levels' => array('DEBUG', 'INFO', 'ERROR', 'WARN', 'FATAL'),
	// 日志处理工具,可以添加多个,设置enabled为true表示已启用
	'handlers' => array(
		'file' => array(
			// 处理引擎
			'driver' => 'file',
			// 记录哪种类型的日志
			'level' => array('DEBUG'),
			// 日志格式,可以在formatters处添加
			'formatter' => 'generic',
			// 是否启用该引擎
			'enabled' => true,
			// 针对该handler的特处配置
			'config' => array(
				'dir' => dirname(dirname(__FILE__)).'/demo/var/log',
			),
		),
	),
	// 日志格式
	'formatters' => array(
		'generic' => '{time} {level} [{logger}] {uri} """{message}"""',
	),
);

几点说明

  • levels项,每一个值都是一个方法,不过是小写的,如$log->debug(‘message’)。如果某个方法不在这些levels里会触发异常。
  • 日志格式的可选变量在plog/formatter.php里,每一个get开头的方法就是,如果觉得不够用,可以自己添加。

日志内容

日志内容取决于日志格式,下面是demo

2010/12/07 16:00:26 DEBUG [app.test] /projects/os/plog/demo/app/test.php?id=1 """hello world"""
2010/12/07 16:00:26 INFO [app.test] /projects/os/plog/demo/app/test.php?id=1 """今晚打老虎"""
2010/12/07 16:01:17 DEBUG [system.core] /projects/os/plog/demo/system/core.php?_profiler=1 """heal the world"""
2010/12/07 16:37:29 DEBUG [system.core] /projects/os/plog/demo/system/core.php?_profiler=1 """heal the world"""

下载

https://github.com/lzyy/plog


--EOF--

若无特别说明,本站文章均为原创,转载请保留链接,谢谢