2012-06-03 59 views
0

過去,我使用FirePHP來記錄數據庫調用和響應。我現在不想這樣做,因爲似乎有很多關於FirePHP和版本兼容性的問題。如何在Zend Framework中記錄數據庫調用

有沒有其他的選擇?我並不需要在瀏覽器控制檯中看到日誌記錄。我很樂意諮詢日誌文件...

謝謝!

回答

2

Zend_Db_Profiler配合Zend_Log應該爲你想要做的工作。 Zend_Db_Profiler也支持開箱即用的Firebug控制檯日誌記錄。

這裏是一個插件,我使用的所有頁面的查詢使用剖析總結:

<?php 

class My_Page_Profiler extends Zend_Controller_Plugin_Abstract 
{ 
    public function dispatchLoopShutdown() 
    { 
     $db = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('db'); 
     $profiler = $db->getProfiler(); 

     $totalQueries = $profiler->getTotalNumQueries(); 
     $queryTime = $profiler->getTotalElapsedSecs(); 

     $longestTime = 0; 
     $longestQuery = null; 
     $queries = $profiler->getQueryProfiles(); 

     $content = "Executed $totalQueries database queries in $queryTime seconds<br />\n"; 

     if ($queries !== false) { // loop over each query issued 
      foreach ($queries as $query) { 
       $content .= "\n<!-- Query (" . $query->getElapsedSecs() . "s): " . $query->getQuery() . "\n\n -->\n"; 
       if ($query->getElapsedSecs() > $longestTime) { 
        $longestTime = $query->getElapsedSecs(); 
        $longestQuery = htmlspecialchars(addcslashes($query->getQuery(), '"')); 
       } 
      } 

      $content .= "Longest query time: $longestTime." 
         ." <a href=\"#\" onclick=\"return false\" title=\"$longestQuery\">Mouseover for query</a><br />\n"; 
     } 

     // Log $content here, or append it to the response body 

     $this->getResponse()->setBody($this->getResponse()->getBody() . 
             $content); 
    } 
} 

對於我而言,我將展示在頁腳中的探查信息時,在開發模式,但你可以很容易地將最後一行更改爲記錄$content並根據需要重新構建內容。您也可以更改它以逐個記錄每個查詢,而不是從所有查詢中構建HTML字符串。希望這給你一個如何使用Zend_Db_Profiler的好工作示例。

要使用它,您需要先啓用Profiler,然後從bootstrap或application.ini註冊該插件。

有幾種啓用探查器的方法,您可以在Zend_Db_Profiler introduction上看到該探查器。

希望有所幫助。

+0

感謝@ drew010,將獲得本在未來一天左右... –

+0

不用擔心把你的時間,希望它證明有幫助。 – drew010

1

最簡單的方法是創建自己的db分析器。例如在一個ini配置文件中使用螢火蟲+ firephp探查配置將是這個樣子:

resources.db.params.dbname    = "dbname" 
resources.db.params.username   = "username" 
resources.db.params.password   = "password" 
resources.db.params.profiler.enabled = 1 
resources.db.params.profiler.class  = "Zend_Db_Profiler_Firebug" 

如果我們看一看在Zend_Db_Profiler_Firebug它真的很簡單的一段代碼,它擴展Zend_Db_Profiler覆蓋一些方法實施firebug + firephp日誌邏輯。

因此,我們可以通過擴展Zend_Db_Profiler來創建自己的自定義日誌分析器。例如我們的定製探查可能包含在一個自定義庫:CustomLib_Db_Profiler

CustomLib_Db_Profile extends Zend_Db_Profiler 
{ 
    // log db profiling to file logic ... 
} 

現在我們需要做的,打開我們的自定義日誌記錄例程改變Zend_Db_Profiler_Firebug在我們的配置文件CustomLib_Db_Profiler,像這樣(當然,這個假設CustomLib前綴,在這個例子中,在包括路徑)

resources.db.params.dbname    = "dbname" 
resources.db.params.username   = "username" 
resources.db.params.password   = "password" 
resources.db.params.profiler.enabled = 1 
resources.db.params.profiler.class  = "CustomLib_Db_Profiler" 
相關問題