Question

Je cherche à configurer ELMAH pour filtrer les erreurs 404 et je me présente des difficultés avec les règles de filtrage XML fourni dans mon fichier web.config. J'ai suivi le tutoriel et ici et a ajouté une déclaration de <is-type binding="BaseException" type="System.IO.FileNotFoundException" /> sous ma déclaration <test><or>..., mais qui a complètement échoué.

Quand je l'ai testé localement je coincé un point d'arrêt dans void ErrorLog_Filtering() {} du Global.asax et a constaté que la System.Web.HttpException qui obtient tiré par ASP.NET pour une 404 ne semble pas avoir un type de base de System.IO.FileNotFound, mais il est tout simplement un System.Web.HttpException. Je l'ai testé en appelant e.Exception.GetBaseException().GetType() dans le gestionnaire d'événements.

Ensuite, je décidé d'essayer un <regex binding="BaseException.Message" pattern="The file '/[^']+' does not exist" /> dans l'espoir que tout message d'exception correspondant au modèle « Le fichier « /foo.ext »n'existe pas » obtiendrait filtré, mais aussi est sans effet. En dernier recours, j'ai essayé <is-type binding="BaseException" type="System.Exception" />, et même qui est entièrement ignorée.

Je suis enclin à penser qu'il ya une erreur de configuration avec ELMAH, mais je ne vois pas. Suis-je manque quelque chose tout à fait évident?

Voici les choses pertinentes de mon 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>
Était-ce utile?

La solution

Il était en effet une erreur de configuration, mais pas celui qui a été particulièrement évidente.

L'ordre dans lequel les HttpModules Elmah sont enregistrés est une préoccupation pertinente car pour ELMAH de filtrer l'exception il faut d'abord savoir quels modules consommeront l'exception. Le ErrorFilter HttpModule doit être enregistré dernier pour empêcher les autres modules de traitement de l'exception filtrée. Cela semble [sorte de] en arrière pour moi, mais au moins cela fonctionne.

<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>

Après avoir examiné le nouveau ELMAH entrée Wiki sur ErrorFiltering J'ai découvert ce petite friandise de l'information qui mérite vraiment une balise, si vous me demandez . ( Modifier : Ils ont bolded depuis j'ai répondu à cette question, les accessoires)

  

La première étape consiste à configurer un module supplémentaire appelé Elmah.ErrorFilterModule. Assurez-vous d'ajouter que après l'un des modules d'exploitation de ELMAH, comme le montre ici avec ErrorLogModule:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top