Frage

Ich versuche ELMAH zum Filter 404 Fehler zu konfigurieren und ich laufe in Schwierigkeiten mit den XML-bereitgestellt Filterregeln in meiner Datei Web.config. Ich folgte das Tutorial hier und hier und hinzugefügt.

Wenn ich es lokal getestet steckte ich einen Haltepunkt in void ErrorLog_Filtering() {} der Global.asax und festgestellt, dass die System.Web.HttpException, die für ein 404 von ASP.NET wird ausgelöst, scheinen nicht zu einem Basistyp von System.IO.FileNotFound zu haben, sondern es ist einfach ein System.Web.HttpException. Getestet habe ich diese durch e.Exception.GetBaseException().GetType() im Ereignishandler aufrufen.

Als nächstes habe ich beschlossen, eine <regex binding="BaseException.Message" pattern="The file '/[^']+' does not exist" /> in der Hoffnung, um zu versuchen, dass jede Ausnahme Nachricht das Muster „Die Datei‚/foo.ext‘nicht existiert“ matching würde gefiltert wird, aber auch das ist keine Wirkung. Als letzten Ausweg habe ich versucht <is-type binding="BaseException" type="System.Exception" />, und auch das ist völlig außer acht gelassen.

Ich bin geneigt ELMAH ein Konfigurationsfehler zu denken, es gibt, aber ich kann nicht jeden sehen. Bin ich etwas fehlt ganz offensichtlich?

Hier ist die relevanten Sachen aus meinem 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>
War es hilfreich?

Lösung

Es war in der Tat ein Konfigurationsfehler, nur nicht eine, die besonders offensichtlich war.

Die Reihenfolge, in der die ELMAH Httpmodules registriert ist, ist eine relevante Bedeutung, weil damit ELMAH die Ausnahme filtern es zuerst wissen müssen, welche Module die Ausnahme verbrauchen. Die ErrorFilter Httpmodule muss zuletzt registriert werden die anderen Module zu verhindern, dass die Verarbeitung der Ausnahme gefiltert. Dies scheint [Art] zurück zu mir, aber zumindest funktioniert es.

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

Nach der Überprüfung der ELMAH Wiki-Eintrag auf ErrorFiltering wieder entdeckte ich diese wenig Leckerbissen der Informationen , die wirklich ein verdient Tag, wenn Sie mich fragen . ( Bearbeiten : Sie haben es fett gedruckt, da ich zum ersten Mal diese Frage beantwortet, Requisiten)

  

Der erste Schritt ist ein zusätzliches Modul namens Elmah.ErrorFilterModule zu konfigurieren. Stellen Sie sicher, dass Sie es nach einem der Logging-Module von ELMAH hinzufügen, wie hier mit ErrorLogModule gezeigt:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top