Situation

Quand on met son site en ligne, on a parfois des erreurs qu’on n’a pas su gérer, ce qu’on appelle une exception, par exemple la base de données qui ne répond pas.

Pour comprendre comment elles ont eu lieu, il faut pouvoir logguer ces exceptions.

Pour corriger le problème rapidement, le site enverra un email à l’administrateur.

Elmah

Elmah permet de répondre à tous ces besoins.

Voici la procédure a faire pour intégrer Elmah à votre projet :

1e étape: Télécharger Elmah

Pour cela cliquer ici, la version que j’utilise présentement est la version 1.1.

2e étape: Ajouter la référence à votre projet

Menu Project / Add Reference, puis ajouter Elmah.dll

3e étape: Modifier la web.config

Ajouter dans la section ConfigSections:

?View Code CONFIG
    <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>

Ajouter dans la section HttpHandlers:

?View Code CONFIG
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />

Ajouter dans la section HttpModules:

?View Code CONFIG
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>

Configurer le serveur SMTP, si ce n’est pas déjà fait:

?View Code CONFIG
  <system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="DoNotReply@XXX.com">
        <network host="smtp.XXX.com" defaultCredentials="true" userName="X" password="X" />
      </smtp>
    </mailSettings>
  </system.net>

Ajouter la section elmah dans la section Configuration:

?View Code CONFIG
  <elmah>
    <security allowRemoteAccess="0" />
    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="C:\Temp" />
    <errorMail from="error@XXXX.com" to="administrator@XXXX.com" priority="High" />
  </elmah>

Ajouter la section location dans la section Configuration:

?View Code CONFIG
  <location path="elmah.axd">
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>

4e étape: Tester

Ajouter le code suivant dans le Page_Load de la page:

Throw New Exception("This is a test")

Compiler et ré-afficher la page.

Une exception est détectée, un mail est envoyé et une entrée dans le fichier xml a été ajoutée.

Allons plus loin

Filtrer les erreurs

Elmah permet de filtrer les erreurs interceptées.

Ainsi on ne voudra pas logguer les erreurs 404 ou encore les exceptions de Type FieldAccessException par exemple. Pour cela, il faut modifier la section elmah dans la web.config de la manière suivante:

?View Code CONFIG
<pre lang="config">
  <elmah>
    <security allowRemoteAccess="0" />
    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="C:\Temp" />
    <errorFilter>
      <test>
        <or>
          <equal binding="HttpStatusCode" value="404" type="Int32" />
          <is-type binding="BaseException" type="System.FieldAccessException" />
        </or>
      </test>
    </errorFilter>
    <errorMail from="error@XXXX.com" to="administrator@XXXX.com" priority="High" />
  </elmah>

Visionner les erreurs

Elmah offre une interface web pour visionner les exceptions, pour cela ouvre la page http://localhost/elmah.axd, voici un exemple du rendu: