0

过去我使用 FirePHP 记录数据库调用和响应。我现在不想这样做,因为围绕 FirePHP 和版本兼容性似乎存在很多问题。

有没有其他选择?我并不特别需要在浏览器控制台中查看日志记录。我很高兴查阅日志文件...

谢谢!

4

2 回答 2

2

Zend_Db_ProfilerZend_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 介绍中看到这些方法。

希望有帮助。

于 2012-06-04T03:00:33.120 回答
1

最简单的方法是创建自己的数据库探查器。例如,在 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_ProfilerCustomLib

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"
于 2012-06-05T03:09:02.323 回答