Estoy intentando configurar ELMAH para filtrar los errores 404 y me encuentro con dificultades con las reglas de filtrado proporcionadas por XML en mi archivo Web.config. Seguí el tutorial here y here y agregué una declaración <is-type binding="BaseException" type="System.IO.FileNotFoundException" />
bajo mi declaración <test><or>...
, pero eso falló completamente.ELMAH - Errores de filtrado 404
Cuando lo probé me quedé localmente un punto de interrupción en void ErrorLog_Filtering() {}
del Global.asax y encontré que el System.Web.HttpException
que es despedido por ASP.NET para un 404 no parecen tener un tipo base de System.IO.FileNotFound
, sino que se es simplemente un System.Web.HttpException
. Probé esto llamando al e.Exception.GetBaseException().GetType()
en el controlador de eventos.
A continuación, decidí probar <regex binding="BaseException.Message" pattern="The file '/[^']+' does not exist" />
con la esperanza de que cualquier mensaje de excepción que coincida con el patrón "El archivo '/foo.ext' no existe" se filtre, pero eso tampoco tiene efecto. Como último recurso, probé <is-type binding="BaseException" type="System.Exception" />
, e incluso eso se descarta por completo.
Me inclino a pensar que hay un error de configuración con ELMAH, pero no puedo ver ninguno. ¿Me estoy perdiendo algo descaradamente obvio?
Aquí está la materia relevante de mi 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>
que segundo enlace lanza una 404. Oh, la ironía ... – Baldy
@Baldy Por desgracia, esto es un nuevo desarrollo. Puede consultar mi ejemplo de configuración para obtener lo que necesita. –
está bien Nathan, el tema fue útil. Me pareció gracioso que el tema sea sobre 404, y uno de los enlaces en la página lleva a un 404 :) – Baldy