2011-04-23 48 views
0

我想重寫CI_Log類來改善日誌行。 我想記錄調用類的名稱和方法。 例子:如何記錄通話類信息?

DEBUG - 2011-04-23 09:21:29 - MY_Class - method --> Router Class Initialized 

我試圖重寫write_log mehod這樣的:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class MY_Log extends CI_Log { 

    public function write_log($level = 'error', $msg, $php_error = FALSE) 
    { 
     [...] 

     $message .= 
      $level . 
      (($level == 'INFO') ? ' - ' : ' - ') . 
      $this->router->fetch_class() . 
      ' - ' . 
      $this->router->fetch_method() . 
      ' - ' . 
      date($this->_date_fmt). ' --> ' . 
      $msg . 
      "\n"; 

     [...] 
    } 

} 

但它不工作,$this->router不能訪問。 你能幫我嗎?

+0

當然,'$ this-> router'只能用於控制器,所以這不是一個好主意。我希望這爲模型等工作... – 2011-04-23 08:30:29

回答

0

好吧,我想我得到了它。這裏是我的代碼:

[...] 

    $message .= $level.(($level == 'INFO') ? ' - ' : ' - ') . date($this->_date_fmt); 

    $stack = debug_backtrace(); 
    // We are searching for the 2nd element of the $stack array beacause : 
    // - $stack[0] is always taken by JG_Log->write_log() 
    // - $stack[1] is always taken by log_message() 
    if (isset($stack[2]['class'])) { 
     $message .= ' - ' . $stack[2]['class'] . ' - ' . $stack[2]['function']; 
    } 

    $message .= ' --> '.$msg."\n"; 

    [...] 

我希望能幫助別人! :-)

1

您可以在某處你的方法使用:

 
//$RTR is available from system/core/CodeIgniter.php 
global $RTR; 
$router_class = $RTR->fetch_class(); 
$rotuer_method = $RTR->fetch_method(); 
+0

感謝您的答案。因爲Log類是在Router類之前初始化的,所以我必須使用下面的語法: '$ router_class =''; \t \t $ router_method =''; \t \t // $ RTR可從system/core/CodeIgniter.php獲得 \t \t global $ RTR; (isset($ RTR)){ \t \t \t $ router_class = $ RTR-> fetch_class(); \t \t \t $ router_method = $ RTR-> fetch_method(); \t} 但是,這隻適用於當前的控制器... – 2011-04-26 07:52:38

+0

我解釋:我想,當控制器/模型/任何人調用'log_message('調試','blabla');'它會生成下面一行'DEBUG - 2011-04-23 09:21:29 - 類 - 方法 - >路由器類初始化' – 2011-04-26 07:57:04