Journalisation avec ASP .NET Core

Introduction

Lorsqu’on développe une application, elle a vocation à être déployée sur un environnement de production. Vous aurez alors besoin de surveiller le bon fonctionnement de cette application avec une journalisation.

Il s’agit d’enregistrer les évènements de votre application dans un fichier, communément appelé log. Ces derniers vous serons aussi utiles pendant votre phase de développement et de recette pour détecter les anomalies fonctionnelles et techniques.

Les logs sont une composante essentielle à toutes les applications, c’est pourquoi des frameworks ont été développés afin de faciliter la gestion des niveaux d’informations, l’intégration dans l’application et le format en sortie.

Comparaison

Avec ASP .NET Core, Microsoft propose sa propre interface pour .NET Core : Microsoft.Extensions.Logging.
Il existe plusieurs librairies qui utilisent cette interface pour fonctionner avec .NET Core : Log4net, Nlog et Serilog.

Log4net est un framework datant de 2001 qui a pris un peu de temps pour porter son code sur .NET Core.
Il s’agit d’un portage de Log4j maintenu par la fondation Apache avec une configuration dans une fichier XML.

Nlog est un projet actif et populaire qui date de 2006. Les dernières versions de Nlog supportent les logs structurés.
La structuration des logs en XML ou JSON permet de faciliter la recherche et l’analyse des logs avec des outils externes.

Serilog un framework récent qui supporte aussi les logs structurés. Officialisé en 2013, il s’est rapidement imposé au sein de la communauté .NET grâce à la simplicité de sa configuration et ses très nombreuses solutions de sorties.

Pour ce tutoriel, nous avons choisis d’utiliser Serilog dans notre application ASP .NET Core, car c’est un framework modulaire activement développé avec une intégration efficace et rapide.

Installation

On va créer une nouvelle solution ASP .NET Core dans Visual Studio :

blog ai3 dotnet-create-project Journalisation avec ASP .NET Core

On ajoute le paquet Nuget « Serilog.ASPNetCore » qui contient toutes les dépendances nécessaires pour utiliser Serilog avec ASP .NET Core.

blog ai3 serilog-asp-net-core Journalisation avec ASP .NET Core

Ouvrez le fichier Program.cs à la racine du projet et ajoutez un bloc « try/catch » dans la méthode « Main » :

Ajouter aussi Serilog dans « CreateHostBuilder » :

blog ai3 createhostbuilder-code Journalisation avec ASP .NET Core

Retirer AddLogging() de « CreateHostBuilder » s’il présent, car il n’est pas nécessaire. Dans le fichier de configuration « appsettings.json », vous pouvez également retirer la section « Logging » qui n’est plus nécessaire aussi.

Si vous le souhaitez, vous pouvez modifier la méthode « Configure » dans le fichier « Startup.cs » en ajoutant la ligne « app.UseSerilogRequestLogging(); » pour l’enregistrement des évènements HTTP.

Ecriture des logs

Ouvrir le fichier « HomeController.cs » et ajouter la propriété privée « _logger » en lecture seule et un paramètre dans constructeur pour l’utiliser via une injection de dépendance. Ajoutez ensuite un log dans la méthode « Index » pour tester que Serilog fonctionne bien.

blog ai3 homecontroller-code Journalisation avec ASP .NET Core

Lancez l’application et vérifiez si le fichier a bien été créé dans le répertoire « C:\Workspace\Logs ».

blog ai3 serilog-file-sample Journalisation avec ASP .NET Core

Format de sortie

Le volume de logs à traiter est parfois conséquent, vous pouvez utiliser une solution comme Azure Monitor ou Kibana pour visualiser plus rapidement les évènements de votre application.

La force de Serilog, ce sont ses extensions qui sont vraiment pratiques, on a un large choix et l’intégration est vraiment rapide.

On intègre par exemple Sentry qui est un traqueur d’anomalie en production. Dans un premier temps, ajouter le paquet Nuget « Serilog.Sinks.Sentry » au projet, puis il suffit d’ajouter la ligne « WriteTo.Sentry(« Sentry DSN ») dans l’initialisation du logger.

blog ai3 serilog-sentry Journalisation avec ASP .NET Core

Dans l’image ci-dessus, « Sentry DSN » corresponds à un identifiant que vous obtenez en créant un compte sur le site de Sentry.

Fichier de configuration

Il est aussi possible de configurer Serilog dans le fichier de configuration « appsettings.json » avec une balise « Serilog » :

Modifiez la propriété du fichier « appsettings.json » pour qu’il soit bien copié dans le dossier de sortie de l’application.

blog ai3 copy-if-newer Journalisation avec ASP .NET Core

Ouvrez votre fichier Program.cs et appliquez les modifications ci-dessous :

Conclusion

Les configurations utilisées dans ce tutoriel ne sont pas exhaustives, il existe bien d’autres options pour gérer les environnements, les enregistrements asynchrones et les bases de données par exemple.

L’intégration de Serilog avec ASP .NET Core présentée ici est un démarrage rapide avec ce framework de journalisation moderne.

N’hésitez pas à partager en commentaire si cet article vous a été utile ou si vous avez rencontrez une problème.

Sources:

https://github.com/serilog/serilog-aspnetcore
https://docs.microsoft.com/fr-fr/aspnet/core/fundamentals/logging/

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.