过去我使用FirePHP来记录数据库调用和响应。我现在不想这样做,因为围绕FirePHP和版本兼容性似乎存在很多问题。
还有其他选择吗?我不需要在浏览器控制台中看到日志记录。我很高兴咨询日志文件...
谢谢!
答案 0 :(得分: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
的良好实例。
要使用它,您需要先启用探查器,然后从bootstrap或application.ini注册该插件。
有几种方法可以启用分析器,您可以在Zend_Db_Profiler introduction上看到。
希望有所帮助。
答案 1 :(得分:1)
最简单的方法是创建自己的数据库分析器。例如在ini配置文件中使用firebug + firephp profiler的配置如下所示:
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
,就像这样(当然,这假定为{{1} }}前缀,在本例中,在include路径上):
CustomLib