質問

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からのロギングモジュールのいずれかの後に追加してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top