Serilog pour C# (.NET) : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction à Serilog : qu'est-ce que c'est et pourquoi l'utiliser

\n\n

Serilog est une bibliothèque puissante, flexible et moderne pour la journalisation structurée dans l'écosystème .NET (C#, F#, VB.NET). Contrairement aux frameworks de journalisation classiques (comme NLog ou log4net), qui fonctionnent avec des messages textuels plats, Serilog est conçu dès le départ pour travailler avec des données structurées.

\n\n

Pourquoi utiliser Serilog ?

\n
    \n
  • Journalisation structurée : Vous ne journalisez pas simplement une chaîne, mais des objets avec des propriétés nommées. Cela permet de filtrer, rechercher et analyser efficacement les logs dans des systèmes comme Elasticsearch, Seq, Datadog.
  • \n
  • Flexibilité (Sinks) : Serilog utilise le concept de "récepteurs" (sinks). Vous pouvez envoyer les logs vers la console, un fichier, une base de données, des services cloud (Azure, AWS), Elasticsearch, Telegram, Slack et des centaines d'autres endroits — en installant simplement le package approprié.
  • \n
  • Performance : Serilog est optimisé pour les applications à forte charge. Il utilise le formatage différé des chaînes (message templates) pour éviter les allocations mémoire inutiles si le niveau de journalisation n'est pas actif.
  • \n
  • Simplicité de configuration : Configuration via code ou fichier JSON. Le code minimal pour commencer — seulement quelques lignes.
  • \n
  • Diagnostic : Permet d'ajouter facilement des informations contextuelles (par exemple, ID utilisateur, numéro de commande, nom de méthode) à chaque log.
  • \n
\n\n

Installation de Serilog

\n\n

Serilog est distribué via NuGet — le gestionnaire de packages pour .NET. L'installation se fait via la console du gestionnaire de packages (Package Manager Console) ou .NET CLI.

\n\n

Installation via .NET CLI (recommandée) :

\n
dotnet add package Serilog\ndotnet add package Serilog.Sinks.Console\ndotnet add package Serilog.Sinks.File\ndotnet add package Serilog.Settings.Configuration\ndotnet add package Serilog.AspNetCore
\n\n

Installation via Package Manager Console (Visual Studio) :

\n
Install-Package Serilog\nInstall-Package Serilog.Sinks.Console\nInstall-Package Serilog.Sinks.File\nInstall-Package Serilog.Settings.Configuration\nInstall-Package Serilog.AspNetCore
\n\n

Explication des packages :

\n
    \n
  • Serilog — le cœur de la bibliothèque.
  • \n
  • Serilog.Sinks.Console — récepteur pour la sortie console.
  • \n
  • Serilog.Sinks.File — récepteur pour l'écriture dans des fichiers.
  • \n
  • Serilog.Settings.Configuration — permet de lire les paramètres depuis appsettings.json.
  • \n
  • Serilog.AspNetCore — intégration avec ASP.NET Core (ajoute le contexte HTTP aux logs).
  • \n
\n\n

Note pour les lecteurs de PythonLib : En Python, l'équivalent de l'installation via pip est pip install serilog (mais Serilog est une bibliothèque .NET, pour Python il existe ses propres outils, par exemple, structlog).

\n\n

Démarrage rapide : premier log en 30 secondes

\n\n

Créez une application console .NET et ajoutez le code suivant dans Program.cs :

\n\n
using Serilog;\n\n// 1. Configuration de Serilog\nLog.Logger = new LoggerConfiguration()\n    .MinimumLevel.Debug()\n    .WriteTo.Console()\n    .WriteTo.File("logs/myapp.log", rollingInterval: RollingInterval.Day)\n    .CreateLogger();\n\ntry\n{\n    Log.Information("Application démarrée avec succès.");\n\n    int userId = 42;\n    string userName = "Alice";\n    Log.Information("L'utilisateur {UserId} nommé {UserName} s'est connecté.", userId, userName);\n\n    // Exemple avec erreur\n    try\n    {\n        throw new InvalidOperationException("Opération invalide");\n    }\n    catch (Exception ex)\n    {\n        Log.Error(ex, "Une erreur s'est produite lors de l'exécution de l'opération pour l'utilisateur {UserId}", userId);\n    }\n\n    Log.Warning("Ceci est un avertissement. Niveau : {Leve                    

Recommendations