码疯窝

PHP 日志插件, 移植自YII的log组件

2014/09/09 18:59:20    分类: 技术随笔    0人评论 次浏览

经常写cron的时候, 我们必须用到日志功能, 一般都是写一个简单的写文件功能来实现, 我发现没有一个好的插件去实现一个完整的, 强大的日志功能. 于是自己就尝试着将YII的log 组件给独立出来. 因为个人十分喜欢YII log 的功能.

日志主要是由 PhpLogger, PhpRoute, PhpRouter 三大类来完成, 其中PhpLogger在内存中记录日志信息, PhpRouter 跟据不同的 Router 处理日志信息, PhpRouter 将 PhpLogger记录的日志信息分发给个个PhpRoute 来进行处理.
目前支持的Router有:
file: 记录日志到文件.
email: 发送日志邮件.
db: 记录日志到数据库
web: 记录日志在页面底部或者firebug.
profile: 记录运行效率日志在页面底部或者firebug.
saeDb: (SAE服务器)记录日志到数据库.
saeStorage: (SAE服务器)记录日志到Storage. (强烈不推荐在日志量大的时候使用些Router, 因为SAE Storage对文件读写的不够完善)

配置文件示例:


return array(
	'routes'=>array(
		array(
			'type'=>'file',
			'logPath' => '/var/log/app',
            'logFile' => 'run.log', 
		),
		array(
			'type'=>'file',
			'levels'=>'error',
			'logPath' => '/var/log/app',
            'logFile' => 'error.log', 
			'filter' => array(
				'prefixSession' => true,
			),
		),
		array(
			'type'=>'email',
			'levels'=>'error',
			'email' => array('gongweiyue@163.com'),
			'from' => 'Error report',
		),
		array(
			'type'=>'db',
			'connection' => array(
				'host' => 'localhost',
				'user' => 'root',
				'password' => 'root',
				'db' => 'myapp',
			),
			'logTableName'=>'sys_log',
			'levels'=>'error, warning, info',
		),
	),
);

以此配置将记录所有级日志到run.log文件以及数据库, 记录error, trace级日志到error.log文件, 并且生成调试信息, 同时发送error级日志到我的邮箱.

使用示例:

PhpLog::log('This is a trace log', 'trace', 'test'); 
PhpLog::log('This is a warning log', 'warning', 'test'); 
PhpLog::log('This is a error log', 'error', 'test'); 
PhpLog::log('This is a info log', 'info', 'test'); 
PhpLog::log('This is a nothing log', 'nothing', 'test');


// Profile testing.
$arr = array();
$len = 500000;
for($i = 0; $i < $len; $i++){
	$arr[] = $i*rand(1000,9999);
}
PhpLog::log('begin:TEST-FOR', 'profile', 'test');
for($i = 0; $i < $len; $i++){
	$str .= $arr[$i];
}
PhpLog::log('end:TEST-FOR', 'profile', 'test'); 

PhpLog::log('begin:TEST-WHILE', 'profile', 'test');
$i = 0;
while($i < $len) {
	$str .= $arr[$i];
	$i++;
}
PhpLog::log('end:TEST-WHILE', 'profile', 'test'); 

PhpLog::log('begin:TEST-WHILELIST', 'profile', 'test');
while(list($key, $val) = each($arr)){
	$str .= $val;
}
PhpLog::log('end:TEST-WHILELIST', 'profile', 'test'); 

PhpLog::log('begin:TEST-FOREACH', 'profile', 'test');
foreach($arr as $key => $val){
	$str .= $val;
}
PhpLog::log('end:TEST-FOREACH', 'profile', 'test'); 

QQ截图20140626182652

具体使用方法请参考github上的说明文件.

插件下载: https://github.com/Gcaufy/PhpLog

继续查看有关 技术随笔的文章

0个访客评论