用户
 找回密码
 入住 CI 中国社区
搜索
查看: 7721|回复: 10
收起左侧

[库 Library] MY_Log,无缝替换原生Log,支持日志输出到文件、FirePHP

  [复制链接]
发表于 2011-7-7 16:04:32 | 显示全部楼层 |阅读模式
本帖最后由 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,其他的都不需要更改。

评分

参与人数 2威望 +8 收起 理由
exploit + 5 赞一个!
jeongee + 3 赞一个!

查看全部评分

发表于 2011-7-7 17:05:41 | 显示全部楼层
使用灰常简单。
发表于 2011-7-7 17:06:37 | 显示全部楼层
使用非常简单。
发表于 2011-7-7 17:07:57 | 显示全部楼层
使用灰常简单。
发表于 2011-8-12 11:19:18 | 显示全部楼层
你好!...
昨天看見你的MY_Log,感覺思路及結構也非常好
對我啟發很大
當中發現有些問題,經小修改後本以為運作正常
但卻發現有些地方運作不了如show_404,及某些controller下
(估計是到了MY_Log的collectLogs中getLogs為empty)
我剛入行,經驗不足希望前輩能指點一下
发表于 2012-1-6 11:33:49 | 显示全部楼层
刚学不久..学习了...
发表于 2013-4-12 13:43:02 | 显示全部楼层
学习了
发表于 2013-4-15 17:08:58 | 显示全部楼层
标记一下,以后用得上!
发表于 2013-5-6 18:39:59 | 显示全部楼层
不好用呢, 可以教导一下吗?
发表于 2013-12-8 00:04:21 | 显示全部楼层
确实可以替换原生的,非常不错

本版积分规则