2

次のweb.configセットアップとElmahについて質問があります。問題は、私が望まないときに、パブリックアクションメソッドの問題に関する電子メールをまだ受け取ることです。私が設置しているフィルターは機能していないようです。

特に、このコードは、他の開発者からオンボードで取得したプロジェクト作業から抜粋されているため、Elmah電子メールフィルタリングでANDとORがどのように機能するかは完全にはわかりません。

タグは、Index、cache、Loginのいずれかの単語を含むエラーが電子メールで報告されないようにすることを目的としています。

誰か助けてもらえますか?

<configuration>
    <configSections>
        <!--Elmah sectionGroup-->
        <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>
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data" />
<errorMail from="" to="" subject="Error(Elmah)" async="true " />
    <security allowRemoteAccess="1"/>
<errorFilter>
  <test>
    <or>
        <is-type binding="BaseException" type="System.InvalidOperationException" />
</or>
<or>
    <regex binding="Exception.Message" pattern="(?ix: \b potentially \b.+?\b dangerous \b.+?\b value \b.+?\b detected \b.+?\b client \b )" />
</or>
<or>
    <regex binding="Exception.Message" pattern="(?ix: \b public action method     'Index' was not found on controller \b )" />
    <regex binding="Exception.Message" pattern="(?ix: \b public action method 'cache' was not found on controller \b )" />
    <regex binding="Exception.Message" pattern="(?ix: \b public action method 'Login' was not found on controller \b )" />
</or>
  </test>
</errorFilter>
  </elmah>  
  <location path="elmah.axd">
  </location>  
  <system.web>
  </system.web>
 <system.webServer>    
<modules runAllManagedModulesForAllRequests="true">
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</modules>
<handlers>
  <add name="httpHandler" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
   </handlers>
  </system.webServer>
</configuration>
4

1 に答える 1

4

test要素は子アサーションを 1 つしか持つことができないため、その下に複数の要素があると、最初のアサーションor以外はすべて無視されます。あなたの説明から、あなたのtest要素は代わりに次のように読むべきだと思われます:

<test>
  <or> 
    <is-type binding="BaseException" type="System.InvalidOperationException" /> 
    <regex binding="Exception.Message" pattern="(?ix: \b potentially \b.+?\b dangerous \b.+?\b value \b.+?\b detected \b.+?\b client \b )" /> 
    <and> 
      <regex binding="FilterSourceType.Name" pattern="mail" />
      <regex binding="Exception.Message" pattern="(?ix: \b public \s action \s method \s '(Index|cache|Login)' \s was \s not \s found \s on \s controller \b )" /> 
    </and>
  </or> 
</test>

また、先に進んで3つのregex要素を1つに折り畳み、パターンを修正して単語を正しく区切ることに注意してください(\bエッジと\s中間)。

于 2012-05-29T14:15:23.573 に答える