过去我使用 FirePHP 记录数据库调用和响应。我现在不想这样做,因为围绕 FirePHP 和版本兼容性似乎存在很多问题。
有没有其他选择?我并不特别需要在浏览器控制台中查看日志记录。我很高兴查阅日志文件...
谢谢!
过去我使用 FirePHP 记录数据库调用和响应。我现在不想这样做,因为围绕 FirePHP 和版本兼容性似乎存在很多问题。
有没有其他选择?我并不特别需要在浏览器控制台中查看日志记录。我很高兴查阅日志文件...
谢谢!
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
.
要使用它,您需要先启用分析器,然后从 bootstrap 或 application.ini 注册该插件。
有几种方法可以启用分析器,您可以在Zend_Db_Profiler 介绍中看到这些方法。
希望有帮助。
最简单的方法是创建自己的数据库探查器。例如,在 ini 配置文件中使用 firebug+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"