Domanda

Sto tentando di configurare ELMAH al filtro 404 errori e io sono in esecuzione in difficoltà con le regole di filtro XML fornito nel mio file web.config. Ho seguito il tutorial qui e qui e ha aggiunto una dichiarazione <is-type binding="BaseException" type="System.IO.FileNotFoundException" /> sotto la mia dichiarazione <test><or>..., ma che non è riuscito del tutto.

Quando ho provato localmente ho bloccato un punto di interruzione nel void ErrorLog_Filtering() {} del Global.asax e ha scoperto che il System.Web.HttpException che viene licenziato da ASP.NET per una 404 non sembra avere un tipo di base di System.IO.FileNotFound, ma piuttosto è semplicemente un System.Web.HttpException. Ho provato questo chiamando e.Exception.GetBaseException().GetType() nel gestore di eventi.

Poi ho deciso di provare un <regex binding="BaseException.Message" pattern="The file '/[^']+' does not exist" /> nella speranza che ogni messaggio di eccezione che corrisponde al modello "Il file '/foo.ext' non esiste" otterrebbe filtrati, ma anche questo sta avendo alcun effetto. Come ultima risorsa ho provato <is-type binding="BaseException" type="System.Exception" />, e anche che è del tutto ignorato.

io sono incline a pensare che ci sia un errore di configurazione con ELMAH, ma non riesco a vedere qualsiasi. Mi sto perdendo qualcosa palesemente evidente?

Ecco la roba rilevante dal mio 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>
È stato utile?

Soluzione

È stato davvero un errore di configurazione, non solo quella che era particolarmente evidente.

L'ordine in cui i HttpModules ELMAH sono registrati è una preoccupazione pertinente, perché in ordine per ELMAH per filtrare l'eccezione deve prima sapere quali moduli saranno consumando l'eccezione. Il ErrorFilter HttpModule deve essere registrato ultima per evitare che gli altri moduli di elaborare l'eccezione filtrata. Questo sembra [genere di] indietro per me, ma almeno funziona.

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

Dopo aver esaminato l'entrata ELMAH Wiki su ErrorFiltering ancora una volta ho scoperto questo piccolo bocconcino di informazioni che merita davvero un tag, se mi chiedete . ( Modifica :! Hanno grassetto è da quando ho risposto a questa domanda; oggetti di scena)

  

Il primo passo è quello di configurare un modulo aggiuntivo chiamato Elmah.ErrorFilterModule. Assicurati di aggiungere che dopo qualsiasi dei moduli di registrazione da ELMAH, come mostrato qui con ErrorLogModule:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top