過去,我使用FirePHP來記錄數據庫調用和響應。我現在不想這樣做,因爲似乎有很多關於FirePHP和版本兼容性的問題。如何在Zend Framework中記錄數據庫調用
有沒有其他的選擇?我並不需要在瀏覽器控制檯中看到日誌記錄。我很樂意諮詢日誌文件...
謝謝!
過去,我使用FirePHP來記錄數據庫調用和響應。我現在不想這樣做,因爲似乎有很多關於FirePHP和版本兼容性的問題。如何在Zend Framework中記錄數據庫調用
有沒有其他的選擇?我並不需要在瀏覽器控制檯中看到日誌記錄。我很樂意諮詢日誌文件...
謝謝!
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上看到該探查器。
希望有所幫助。
最簡單的方法是創建自己的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"
感謝@ drew010,將獲得本在未來一天左右... –
不用擔心把你的時間,希望它證明有幫助。 – drew010