Section courante

A propos

Section administrative du site

Les premiers pas

Utilisation d'ElmahCore

Le ElmahCore est un ELMAH pour Net.Standard et .NET Core (3.1, 5, 6).

Ajouter le paquet NuGet elmahcore, avec une commande comme ceci en Visual Studio :

Install-Package ElmahCore

Utilisation simple

Dans le fichier «Startup.cs»

app.UseElmah() doit être initialisé après l'initialisation d'autres intergiciels de gestion des exceptions, tels que UseExceptionHandler, UseDeveloperExceptionPage,...

Chemin elmah par défaut : ~/elmah.

Modifier le chemin de l'URL

  1. services.AddElmah(options => options.Path = "votre_chemin_ici")

Restreindre l'accès à l'URL d'Elmah

  1. services.AddElmah(options =>
  2. {
  3.         options.OnPermissionCheck = context => context.User.Identity.IsAuthenticated;
  4. });     

Remarque : app.UseElmah(); doit être après :

  1. app.UseAuthentication();
  2. app.UseAuthorization();
  3. app.UseElmah();

ou l'utilisateur sera redirigé vers l'écran de connexion même s'il est authentifié.

Modifier le type de journal d'erreurs

Vous pouvez créer votre propre journal d'erreurs, entreposant les erreurs où vous le souhaitez :

  1. class MyErrorLog: ErrorLog
  2. //implémenter ErrorLog

Les journaux d'erreurs sont disponibles dans le tableau :

Classe Description
MemoryErrorLog Entrepose les erreurs en mémoire (par défaut)
XmlFileErrorLog Entrepose les erreurs dans des fichiers XML.
SqlErrorLog Entrepose les erreurs dans MS SQL (ajoute une référence à ElmahCore.Sql)
MysqlErrorLog Entrepose les erreurs dans MySQL (ajoute une référence à ElmahCore.MySql)
PgsqlErrorLog Entrepose les erreurs dans PostgreSQL (ajoute une référence à ElmahCore.Postgresql)

Par les fichiers :

  1. services.AddElmah<XmlFileErrorLog>(options =>
  2. {
  3.     options.LogPath = "~/log"; // OU options.LogPath = "c:\errors";
  4. });

Par la base de données :

  1. services.AddElmah<SqlErrorLog>(options =>
  2. {
  3.     options.ConnectionString = "connection_string";
  4.     options.SqlServerDatabaseSchemaName = "Errors"; //La valeur par défaut est dbo si elle n'est pas définie
  5.     options.SqlServerDatabaseTableName = "ElmahError"; //La valeur par défaut est ELMAH_Error si elle n'est pas définie
  6. });

Lever une exception

  1. public IActionResult Test()
  2. {
  3.     HttpContext.RaiseError(new InvalidOperationException("Test"));
  4.     ...
  5. }     

Utilisation de UseElmahExceptionPage

Vous pouvez remplacer UseDeveloperExceptionPage par UseElmahExceptionPage :

  1. if (env.IsDevelopment())
  2. {
  3.    //app.UseDeveloperExceptionPage();
  4.    app.UseElmahExceptionPage();
  5. }

Utilisation des avertissements

Vous pouvez créer vos propres notifications en implémentant l'interface IErrorNotifier ou IErrorNotifierWithId et en ajoutant un avertissement aux options Elmah :

  1. services.AddElmah<XmlFileErrorLog>(options =>
  2. {
  3.     options.Path = @"errors";
  4.     options.LogPath = "~/logs";
  5.     options.Notifiers.Add(new ErrorMailNotifier("Email",emailOptions));
  6. });

Chaque avertissement doit avoir un nom unique.

Utilisation des filtres

Vous pouvez utiliser la configuration du filtre XML Elmah dans un fichier séparé, créer et ajouter des filtres personnalisés :

  1. services.AddElmah<XmlFileErrorLog>(options =>
  2. {
  3.     options.FiltersConfig = "elmah.xml";
  4.     options.Filters.Add(new MyFilter());
  5. })

Le filtre personnalisé doit implémenter IErrorFilter. Exemple de configuration de filtre XML :

<?xml version="1.0" encoding="utf-8" ?>
<elmah>
     <errorFilter>
          <notifiers>
               <notifier name="Email"/>
          </notifiers>
          <test>
               <and>
                    <greater binding="HttpStatusCode" value="399" type="Int32" />
                    <lesser  binding="HttpStatusCode" value="500" type="Int32" />
               </and> 
          </test>
     </errorFilter>
</elmah>     


Dernière mise à jour : Jeudi, le 10 avril 2025