Après la création  de notre crud dans l’article “CRUD ASP.NET Core MVC avec MYSQL” , nous ajouterons un fichier de journalisation ou un  logger pour suivre l’état de notre en application en production.

C’est quoi un fichier de journalisation ou logger?

Le fichier de journalisation ou un logger enregistre chronologiquement les événements exécutés sur notre application. Il permet de comprendre et de déboguer rapidement notre application en production en cas de bug ou erreur.

ASP.net core propose des fournisseurs de journalisation grâce à son hôte générique au niveau des éléments suivants:

Les fournisseurs de journaux de ASP.core peuvent être appelés fournisseurs de journalisation intégrés.

Avant de créer un fichier de journalisation, il faut effectuer une configuration.

La configuration de la journalisation est généralement fournie par la section Logging des fichiers appsettings.{ENVIRONMENT}.json, où l’espace réservé {ENVIRONMENT} correspond à l’environnement. Le fichier appsettings.Development.json suivant est généré par défaut dans le projet ASP.NET Core :

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}

La propriété Logging peut avoir des propriétés LogLevel et des propriétés de fournisseur de journaux.

Le logLevel est constitué d’une catégorie à gauche et d’un niveau de log à droite.

Il est important de comprendre comment le niveau de log fonctionne.

La propriété LogLevel spécifie le niveau de journalisation minimal pour les catégories sélectionnées. Dans le code JSON précédent, les niveaux de journalisation Information et Warning sont spécifiés. LogLevel indique le niveau de gravité du journal, qui peut varier de 0 à 6 :

Trace = 0, Debug = 1, Information = 2, Warning = 3, Error = 4, Critical = 5 et None = 6.

ASP.NET niveau de log ou log level

NB: Pour en savoir plus sur la journalisation dotnet voici le lien de la page officiel avec plus de détail en fonction de votre version de dotnet:

https://learn.microsoft.com/fr-fr/aspnet/core/fundamentals/logging/?view=aspnetcore-7.0

Maintenant débutons le code 👍

Nlog avec .NET core

Nous utiliserons un fournisseur de journalisation tiers (Nlog) qui nous permettras d’avoir notre fichier de journalisation

Ajoutons installons le package nlog.

NLog.Web.AspNetCore


Ajoutons un fichier de configuration propre à nlog

À la racine du projet créons un fichier nlog.config

Ajoutons les éléments suivants dans notre fichier

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <targets>
    <target name="allfile" xsi:type="File"
   fileName="c:\${shortdate}_logfile.txt"/>
  </targets>
  <rules>
      <logger name="*" minlevel="Info" writeTo="allfile" />
      <logger name="System.*" finalMinLevel="Warn" />
      <logger name="Microsoft.*" finalMinLevel="Warn" />
      <logger name="Microsoft.Hosting.Lifetime*" finalMinLevel="Info" />
  </rules>
  </nlog>

L'élément nous permet de générer un fichier avec les informations de journalisation dans le fichier correspondant

Dans notre fichier Program.cs ajoutons nlog

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args).ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                logging.AddNLog();
            }).ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

    

Dans notre fichier Startup aussi ajoutons l’élément suivant

LogManager.LoadConfiguration(string.Concat(Directory.GetCurrentDirectory(),
"/nlog.config"));

Démarrons à nouveau notre solution et observons la création de fichier de journalisation ou log.

Journalisation ou Logger .net core mvc 

Configurons notre fichier nlog.config pour la production sur un serveur linux.
Changeons juste notre path ou chemin avec le filename de notre serveur en production

<target name="allfile" xsi:type="File"
   fileName="${basedir}/logs/${shortdate}_logfile.txt"/>


Faisons la mise à jour en production sur notre serveur linux.

Après la mise à jour nous démarrons notre service

epa@localhost:/var/log$ sudo systemctl restart crud-mvc.service
epa@localhost:/var/log$ sudo systemctl status crud-mvc.service

Observons maintenant dans le fichier de notre projet nous avons le dossiers logs avec notre fichier de journalisation à l’intérieur


Nous savons maintenant ajouter un fichier de journalisation dans nos projets .net core. Je vous laisse tester aussi