6

Application.cfc onRequestEnd 関数に、特定のアプリケーション変数フラグがオンの場合にクエリ sql と実行時間をデータベース テーブルに記録するコードを追加したいと考えています。ColdFusion はクエリ構造の一部として SQL と実行時間を返すため、この部分は比較的簡単です。

ただし、このサイトにはおそらく 1000 ページ近くのページがあり、それらすべてを変更するのは現実的ではありません。したがって、onRequestEnd関数でこれを完全にプログラムで行いたいと思います。そのためには、ページで実行されたすべてのクエリのリストを何らかの方法で取得する必要があり、そこで困惑しています。

現在のページで実行されたすべてのクエリの名前のリストを取得するにはどうすればよいですか? これらのクエリはテンプレートの変数スコープに表示されますが、そこには他にも無数の変数があり、それを簡単にループしてどれがクエリであるかを判断する方法がわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

6

その情報はデバッグ テンプレートを介して入手できるため、これらのファイルを参考にしてください。

考慮すべきもう1つのことは、クエリをCFCまたはカスタムタグにカプセル化し、それでログを処理することです(ただし、クエリはサイト全体に分散していると思われるため、変更するページが多くなる可能性があります-それは理由を物語っていますデータ アクセスをカプセル化することは良い考えです。このような状況では、保守と強化が容易になります)。

デバッグ テンプレートからの関連コード (少し最新化されています) は次のとおりです。

<cfset tempFactory = createObject("java", "coldfusion.server.ServiceFactory") />
<cfset tempCfdebugger = tempFactory.getDebuggingService() />
<cfset qEvents = tempCfdebugger.getDebugger().getData() />

<cfquery dbType="query" name="qdeb">
    SELECT *, (endTime - startTime) AS executionTime
    FROM qEvents WHERE type = 'SqlQuery'
</cfquery>
于 2010-12-17T20:01:24.967 に答える