|
本帖最后由 sunnyfriend 于 2011-7-7 17:28 编辑
自己扩展了一个MY_Log, 用法类似于log4j,目前支持将日志输出到文件、FirePHP。
如果你需要将日志输出到其他地方,比如邮件、数据库等,可以很方便地进行扩展。
用法很简单,大家一看就知道。
1. 下载文件放在 application/libraries下面。
MY_Log.zip
(18.03 KB, 下载次数: 142)
2. 修改配置(application/config/config.php),将log相关的配置修改为
PHP复制代码
//$config['log_threshold'] = 0;
//$config['log_path'] = '';
//$config['log_date_format'] = 'Y-m-d H:i:s';
// 日志的级别
$config['log_threshold'] = 'debug,info,warning,error';
// 日志的输出地
$config['log_routes'] = array(
// 将error,warning级别的日志保存到文件
'file'=>array(
'log_path'=>realpath(APPPATH .'logs'),
'log_levels'=>'error,warning',
),
// 将 debug,info,warning,error 级别的日志输出到firephp
'firephp'=>array(
'log_levels'=>'debug,info,warning,error',
)
);
复制代码
3. 使用的API,跟以前一样,没有任何变化:
PHP复制代码
log_message('error', '错误');
log_message('debug', '测试');
复制代码
-------------------------------------------------------------------------------------------------------------------------------------------
该日志系统提供了扩展接口,可以根据自己的要求写Route,比如我们需要写一个Route,将日志保存到数据库中:
1. 建立文件:libraries/logging/Db.php
2. 继承Log_Route类并实现 processLogs 方法:
PHP复制代码
<?php
class Log_Route_Db extends Log_Route
{
/**
* 要使用的数据库连接名,在config/database.php中配置
*
* @var string
*/
public $log_db_name='default';
/**
* 要保存到的数据表
*
* @var string
*/
public $log_table='logs';
private $_db;
/**
* @see Log_Route::init()
*/
function init ($log_threshold)
{
if(isset($GLOBALS['CI']))
$this->_db =$GLOBALS['CI']->load->database($this->log_db_name,true);
}
/**
* 将日志保存到文件
*
* @param array $logs
* @see Log_Route::processLogs()
*/
protected function processLogs ($logs)
{
// 避免数据库未初始化
if(!$this->_db )
return;
// 将日志保存到数据表中,当然表要存在
foreach($logs as $log)
$this->_db ->insert($this->log_table,array(
'level'=>$log[0],
'message'=>$log[1],
'time'=>@date($this->log_date_format,$log[2]),
));
}
}
复制代码
3. 修改配置,使用我们刚实现的这个Route。(当然你需要先配置好数据库,建好表)
PHP复制代码
$config['log_routes'] = array(
// 将error,warning级别的日志保存到文件
'file'=>array(
'log_path'=>realpath(APPPATH .'logs'),
'log_levels'=>'error,warning',
),
// 将 debug,info,warning,error 级别的日志输出到firephp
'firephp'=>array(
'log_levels'=>'debug,info,warning,error',
),
// 将error级别的错误保存到数据库
'db'=>array(
'log_table'=>'logs',
'log_levels'=>'error',
)
);
复制代码
好。这样就OK了,是不是很简单。
-------------------------------------------------------------------------------------------------------------------
对了,如果你的配置文件中 $config['subclass_prefix'] 并不是 'MY_' 的话,
需要把文件名MY_Log.php改为$config['subclass_prefix'] Log.php, 类名也需要改为$config['subclass_prefix'] Log,其他的都不需要更改。
|
评分
-
查看全部评分
|