過去に、FirePHP を使用してデータベースの呼び出しと応答を記録しました。FirePHP とバージョンの互換性に関して多くの問題があるように思われるため、今はこれを行いたくありません。
代替手段はありますか?ブラウザ コンソールでログを表示する必要は特にありません。ログファイルを参照できることを非常にうれしく思います...
ありがとう!
過去に、FirePHP を使用してデータベースの呼び出しと応答を記録しました。FirePHP とバージョンの互換性に関して多くの問題があるように思われるため、今はこれを行いたくありません。
代替手段はありますか?ブラウザ コンソールでログを表示する必要は特にありません。ログファイルを参照できることを非常にうれしく思います...
ありがとう!
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 の紹介で確認できるように、プロファイラーを有効にする方法はいくつかあります。
それが役立つことを願っています。
最も簡単な方法は、独自の 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_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"