2014-01-23 41 views
1

我想在每個控制器方法運行時間(公共和私人)的日誌中寫一行。最初,我按照人們的想象設置了這一點,非常手動地從結束秒數中減去開始秒數,並在每個方法的開始和結束處寫入日誌。軌跡控制器方法運行時間

保持儘可能幹,我想知道如果有人知道一種方法來抽象這個,所以我不必在每一種方法編寫相同的代碼。

這是使用Codeigniter。

+0

你有沒有看着可用探查? http://ellislab.com/codeigniter/user-guide/general/profiling.html – stormdrain

+0

是的,但我正在尋找的是在「前/後控制器方法鉤」中使用,所以我沒有以每一種方法設置開始和結束。 – Chords

回答

0

看來你甚至不需要profiler類;可以只使用基準測試類:

的application/config/config.php文件

$config['enable_hooks'] = TRUE; 

的application/config/hooks.php

$hook['post_controller_constructor'] = array(
           'class' => 'MyProfiler', 
           'function' => 'start_profiler', 
           'filename' => 'profiler.php', 
           'filepath' => 'hooks', 
           ); 

// or 'post_system' to benchmark page render too 
$hook['post_controller'] = array(
           'class' => 'MyProfiler', 
           'function' => 'stop_profiler', 
           'filename' => 'profiler.php', 
           'filepath' => 'hooks', 
           ); 

應用/鉤/分析器.php

class MyProfiler { 

    var $CI; 

    function __construct(){ 
     $this->CI =& get_instance(); 
    } 

    function start_profiler() { 
     $this->CI->benchmark->mark('code_start'); 
    } 

    function stop_profiler() { 
     $this->CI->benchmark->mark('code_end'); 
     echo $this->CI->benchmark->elapsed_time('code_start', 'code_end');//or log 
    } 
} 

http://ellislab.com/codeigniter/user-guide/general/hooks.html
http://ellislab.com/codeigniter/user-guide/libraries/benchmark.html

+0

這絕對是正確的方向,但我不認爲它會完全符合我的要求(並且我認爲我必須在基準類之外進行)。我正在尋找運行前和運行*方法*運行的鉤子。例如,如果我有一個方法有一個循環,可以在同一個控制器中對私有方法運行10次調用,我希望公有方法的運行時間以及每個運行的私有方法。 – Chords