0

過去に、FirePHP を使用してデータベースの呼び出しと応答を記録しました。FirePHP とバージョンの互換性に関して多くの問題があるように思われるため、今はこれを行いたくありません。

代替手段はありますか?ブラウザ コンソールでログを表示する必要は特にありません。ログファイルを参照できることを非常にうれしく思います...

ありがとう!

4

2 に答える 2

2

Zend_Logと組み合わせたZend_Db_Profilerは、目的に応じて機能するはずです。 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 文字列を作成するのではなく、各クエリを一度に 1 つずつログに記録するように変更することもできます。うまくいけば、これが の使用方法の良い実例となりますZend_Db_Profiler

これを使用するには、最初にプロファイラーを有効にしてから、bootstrap または application.ini からそのプラグインを登録する必要があります。

Zend_Db_Profiler の紹介で確認できるように、プロファイラーを有効にする方法はいくつかあります。

それが役立つことを願っています。

于 2012-06-04T03:00:33.120 に答える
1

最も簡単な方法は、独自の db プロファイラーを作成することです。たとえば、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 に答える