2010-09-03 7 views
2

J'active le filtrage du journal des erreurs dans Elmah et je veux le faire par programmation dans un gestionnaire d'événements ErrorLog_Filtering. Il fonctionne bien sous le serveur de développement de Visual Studio mais dès que je passe sous IIS7 (local sur ma machine dev ou distant sur mon serveur web), le gestionnaire n'est pas appelé (la journalisation des erreurs fonctionne bien).Elmah: gestionnaire d'événements ErrorLog_Filtering non appelé sous IIS7

Voici mon habitude 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" /> 
     <section name="errorTweet" requirePermission="false" type="Elmah.ErrorTweetSectionHandler, Elmah" /> 
    </sectionGroup> 
    </configSections> 

    <elmah> 
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ShopMvcConnectionString" /> 
    </elmah> 

    <system.web> 

    <httpHandlers> 
     <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
    </httpHandlers> 

    <httpModules> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" /> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" /> 
    </httpModules> 

    </system.web> 

    <system.webServer> 

    <modules runAllManagedModulesForAllRequests="true"> 
     <add name="Elmah.ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" /> 
     <add name="Elmah.ErrorFilter" type="Elmah.ErrorFilterModule" preCondition="managedHandler" /> 
    </modules> 

    <handlers> 
     <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" /> 
    </handlers> 
    </system.webServer> 

</configuration> 

et mon gestionnaire dans Global.asax:

public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e) 
{ 
} 

Répondre

7

La raison pour laquelle votre gestionnaire de ne pas être appelé sous IIS 7 est parce que vous nommé le module différemment. Vous l'avez nommé ErrorLog sous system.web/httpModules puis Elmah.ErrorLog sous system.webServer/modules.

Handling module events in Global.asax fonctionne via une convention de dénomination où le gestionnaire d'événements doit être nommé après le nom du module tel qu'il se trouve dans la configuration suivi d'un trait de soulignement (_), suivi du nom de l'événement. ErrorLog_Filtering est bien et correspond au nom enregistré sous system.web/httpModules et qui est pris en charge par le Visual Studio Development Server. Vous avez juste besoin de vous assurer que vous faites correspondre tous les noms et cela devrait fonctionner dans les deux environnements. Voir aussi: Programmatically log error and send email

+0

Merci beaucoup. Je suppose que j'ai fait du copier/coller et que je n'ai pas réalisé la présence du préfixe d'Elmah. –

Questions connexes