エルマ - フィルタリング404エラー
質問
404エラーをフィルタリングするようにElmahを構成しようとしていますが、Web.configファイルのXMLが提供するフィルタールールで困難に遭遇しています。チュートリアルに従いました ここ と ここ そして、追加しました <is-type binding="BaseException" type="System.IO.FileNotFoundException" />
私の下の宣言 <test><or>...
宣言ですが、それは完全に失敗しました。
ローカルでテストしたとき、私はブレークポイントを貼り付けました void ErrorLog_Filtering() {}
Global.asaxの System.Web.HttpException
404のためにASP.NETによって解雇されます System.IO.FileNotFound
, 、むしろそれは単にaです System.Web.HttpException
. 。電話でこれをテストしました e.Exception.GetBaseException().GetType()
イベントハンドラー。
次に、私はaを試すことにしました <regex binding="BaseException.Message" pattern="The file '/[^']+' does not exist" />
「ファイル '/foo.ext'が存在しない」パターンに一致する例外メッセージがフィルタリングされることを期待して、それも効果がありません。最後の手段として、私は試しました <is-type binding="BaseException" type="System.Exception" />
, 、そしてそれでさえ完全に無視されています。
Elmahに構成エラーがあると思う傾向がありますが、何も表示されません。露骨に明白なものが足りないのですか?
これが私のweb.configからの関連するものです:
<configuration>
<configSections>
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah"/>
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah"/>
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup>
</configSections>
<elmah>
<errorFilter>
<test>
<or>
<equal binding="HttpStatusCode" value="404" type="Int32" />
<regex binding="BaseException.Message" pattern="The file '/[^']+' does not exist" />
</or>
</test>
</errorFilter>
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data/logs/elmah" />
</elmah>
<system.web>
<httpModules>
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
</httpModules>
</system.web>
<system.webServer>
<modules>
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
</modules>
</system.webServer>
</configuration>
解決
それは確かに構成エラーであり、特に明白なものではありませんでした。
Elmah httpmodulesが登録されている順序は、Elmahが例外をフィルタリングするためには、どのモジュールが例外を消費するかを最初に知る必要があるため、適切な懸念です。 errorfilter httpmoduleは最後に登録する必要があります 他のモジュールがフィルタリングされている例外を処理するのを防ぐため。これは私には[一種の]後方に見えますが、少なくとも機能します。
<configuration>
...
<system.web>
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
</httpModules>
</system.web>
<system.webServer>
<modules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
</modules>
</system.webServer>
</configuration>
レビュー後 エラーフィルタリングに関するエルマウィキエントリ 繰り返しますが、私はこの小さな情報を発見しました 本当にそれに値する u003Cstrong /> タグ、あなたが私に尋ねるなら. (編集: :私がこの質問に最初に答えて以来、彼らはそれを大胆にしました。小道具!)
最初のステップは、Elmah.Errorfiloduleと呼ばれる追加のモジュールを構成することです。 ErrorLogModuleでここに示されているように、Elmahからのロギングモジュールのいずれかの後に追加してください。