sunnyfriend 发表于 2011-7-7 16:04:32

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

本帖最后由 sunnyfriend 于 2011-7-7 17:28 编辑

自己扩展了一个MY_Log, 用法类似于log4j,目前支持将日志输出到文件、FirePHP。
如果你需要将日志输出到其他地方,比如邮件、数据库等,可以很方便地进行扩展。

用法很简单,大家一看就知道。
1. 下载文件放在 application/libraries下面。

2. 修改配置(application/config/config.php),将log相关的配置修改为

//$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,跟以前一样,没有任何变化:

log_message('error', '错误');
log_message('debug', '测试');



-------------------------------------------------------------------------------------------------------------------------------------------

该日志系统提供了扩展接口,可以根据自己的要求写Route,比如我们需要写一个Route,将日志保存到数据库中:
1. 建立文件:libraries/logging/Db.php
2. 继承Log_Route类并实现 processLogs 方法:

<?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,
                              'message'=>$log,
                              'time'=>@date($this->log_date_format,$log),
                        ));
      }
}


3. 修改配置,使用我们刚实现的这个Route。(当然你需要先配置好数据库,建好表)

$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,其他的都不需要更改。

freeheartgy 发表于 2011-7-7 17:05:41

使用灰常简单。:victory:

freeheartgy 发表于 2011-7-7 17:06:37

使用非常简单。:victory:

freeheartgy 发表于 2011-7-7 17:07:57

使用灰常简单。:victory:

wai43 发表于 2011-8-12 11:19:18

你好!...
昨天看見你的MY_Log,感覺思路及結構也非常好
對我啟發很大
當中發現有些問題,經小修改後本以為運作正常
但卻發現有些地方運作不了如show_404,及某些controller下
(估計是到了MY_Log的collectLogs中getLogs為empty)
我剛入行,經驗不足希望前輩能指點一下

cangyingaoyou 发表于 2012-1-6 11:33:49

刚学不久..学习了...

wxlreg 发表于 2013-4-12 13:43:02

学习了

smallhe 发表于 2013-4-15 17:08:58

标记一下,以后用得上!

ze00ro 发表于 2013-5-6 18:39:59

不好用呢, 可以教导一下吗?

gamesstart 发表于 2013-12-8 00:04:21

确实可以替换原生的,非常不错
页: [1] 2
查看完整版本: MY_Log,无缝替换原生Log,支持日志输出到文件、FirePHP