2009-09-08 30 views
23

複数のアプリケーションからのエラーを格納するための単一のSQLログがあります。私たちは、各アプリケーションのelmah.axdページを無効にしており、一般的なSQLログにエラーを報告するすべてのアプリケーションのエラーを特別に表示する新しいアプリケーションを用意したいと考えています。1つのDBログを持つ複数のアプリケーションに単一のElmah.axdを使用

現在のところ、すべてのエラーのアプリケーションで共通のSQLログを使用していても、現在のアプリケーションのエラーのみが表示されます。誰もこれを前にしたことがありますか?エルマコード内では何が調整される必要がありますか?

+1

このような素敵な質問を明確にしてくれてありがとう、あなたはタイムマシンで私の言葉を取ってきました。それは今、ほぼ6〜7年後です。 – AKS

答えて

30

「SQLログ」とはMSSQL Serverを意味します...もしそうなら、おそらく、あなたの望むものを達成する最も簡単な方法は、エラーを保持するSQL Serverデータベースで作成されたストアドプロシージャを編集することです。エラーリストを取得するには

、ELMAH DLLがパラメータとしてアプリケーション名とELMAH_GetErrorsXML PROCを呼び出し、その後、procがWHERE [Application] = @Application句とリターンをフィルタリングします。

ELMAH_GetErrorsXML procからWHERE句を削除するだけで、アプリケーションに関係なくすべてのエラーを返す必要があります。

エラーレコードを正しく取得するには、アプリケーションごとにフィルタリングするため、ELMAH_GetErrorXML procと同じ処理を行う必要があります。

これはもちろん、この特定のデータベースからエラーを取り出すアプリケーションにも影響しますが、私はあなたのケースではこれだけしか持っていないと仮定します。

CAVEAT:私はこれを試していないので、私は結果を保証することはできません...

+0

正解!私はsprocの修正を見ていきます。 – RSolberg

+1

@ E.King、お返事ありがとうございます、魅力のように... – AKS

2

はい、それは簡単に動作します。ただし、Elmah/Default.aspxにはアプリ名は表示されません。私はそれが壊れやすい場合は見つかりませんでした - ちょうど1列をもっと表示してください。

+1

それは本当です。そのページのレイアウトはErrorLogPage.csコードで定義されているので、別の列を追加するには、ソースをダウンロードして変更して再コンパイルする必要があります。 http://code.google.com/p/elmah/source/browse/trunk/src/Elmah/ErrorLogPage.cs –

4

デフォルトのElmahハンドラファクトリをオーバーライドして、アプリケーションごとにElmahログをフィルタ処理することは問題ありません。私はMySqlでそれを行う方法を示すサンプルアプリケーションを書いた:http://diagnettoolkit.codeplex.com/releases/view/103931。あなたはそれがどのように動作するのかを説明するpost on my blogをチェックすることもできます。

+0

+1 - これはこれを行う方法です。きれいでシンプルで、元のDDLスクリプトもElmahソースコードも変更する必要はありません。ブログ記事はそれをすべて説明しています。いい職人です! –

+0

私はこれを実装しました。良い仕事! –

+0

これは良い選択肢です。ただし、一度に1つのアプリケーションのエラーしか表示されず、アプリケーションの名前を前もって知る必要があるという欠点があります。すべてのアプリケーションでエラーのリストを表示したいのであれば(これはどのように私が質問を解釈したかというと)、私はそれを見ていない限り、これをしません。 –

関連する問題