Comment enregistrer des données dans le journal des événements Windows en C #

Le système d'exploitation Windows enregistre les données dans le journal des événements Windows chaque fois qu'un problème survient. Vous pouvez afficher ces données à l'aide de l'outil Observateur d'événements Windows. Cet article explique comment vous pouvez travailler par programme avec le journal des événements Windows en C #.

Pour utiliser les exemples de code fournis dans cet article, vous devez disposer de Visual Studio 2019 installé sur votre système. Si vous n'en avez pas déjà une copie, vous pouvez télécharger Visual Studio 2019 ici.

Créer un projet d'application console .NET Core dans Visual Studio

Tout d'abord, créons un projet d'application console .NET Core dans Visual Studio. En supposant que Visual Studio 2019 est installé sur votre système, suivez les étapes décrites ci-dessous pour créer un nouveau projet d'application console .NET Core dans Visual Studio.

  1. Lancez l'IDE de Visual Studio.
  2. Cliquez sur "Créer un nouveau projet".
  3. Dans la fenêtre «Créer un nouveau projet», sélectionnez «Application console (.NET Core)» dans la liste des modèles affichés.
  4. Cliquez sur Suivant.
  5. Dans la fenêtre «Configurer votre nouveau projet» ci-dessous, spécifiez le nom et l'emplacement du nouveau projet.
  6. Cliquez sur Créer.

Cela créera un nouveau projet d'application console .NET Core dans Visual Studio 2019. Nous utiliserons ce projet pour travailler avec le journal des événements Windows dans les sections suivantes de cet article.

Installez le package EventLog NuGet

Pour pouvoir utiliser le journal des événements Windows dans les applications .NET Core, vous devez installer le package Microsoft.Extensions.Logging.EventLog à partir de NuGet. Vous pouvez le faire via le gestionnaire de packages NuGet dans l'IDE de Visual Studio 2019 ou en exécutant la commande suivante dans la console du gestionnaire de packages NuGet:

Package d'installation Microsoft.Extensions.Logging.EventLog

Créer une instance de la classe EventLog en C #

Pour créer une instance de la classe EventLog et écrire une entrée dans le journal des événements Windows, vous pouvez utiliser le code suivant:

EventLog eventLog = nouveau EventLog ();

eventLog.Source = "MyEventLogTarget";

eventLog.WriteEntry ("Ceci est un message de test.", EventLogEntryType.Information);

Écrire dans une instance EventLog en C #

Si vous souhaitez enregistrer des données dans cette instance EventLog à partir de votre application, vous pouvez utiliser le code suivant:

string message = "Ceci est un message de test.";

en utilisant (EventLog eventLog = new EventLog ("Application"))

{

    eventLog.Source = "Application";

    eventLog.WriteEntry (message, EventLogEntryType.Information);

}

Effacer une instance EventLog en C #

Pour effacer l'instance EventLog, vous pouvez utiliser le code suivant:

EventLog eventLog = nouveau EventLog ();

eventLog.Source = "MyEventLogSource";

eventLog.Clear ();

L'extrait de code suivant peut être utilisé pour supprimer un journal des événements.

if (EventLog.Exists ("MyEventLogTarget"))

{

   EventLog.Delete ("MyEventLogTarget");

}

Lire les entrées EventLog en C #

Vous pouvez lire toutes les entrées de journal à l'aide de l'extrait de code ci-dessous:

EventLog eventLog = nouveau EventLog ();

eventLog.Log = "MyEventLogTarget";

foreach (entrée EventLogEntry dans eventLog.Entries)

   // Écrivez votre code personnalisé ici

}

Utilisez NLog pour écrire des données de journal dans EventLog en C #

Nous allons maintenant profiter du package NLog.WindowsEventLog. Ce package nous permettra d'utiliser NLog pour envoyer des données de journal à EventLog tout en travaillant à partir de l'environnement .NET Core.

NLog.WindowsEventLog encapsule les subtilités de la connexion à EventLog et de l'utilisation d'EventLog à partir d'ASP.NET Core. Il vous suffit d'appeler les méthodes NLog comme vous le faites normalement.

Étant donné que nous utiliserons NLog pour consigner les données dans EventLog, ajoutez le package suivant à votre projet:

Package d'installation NLog.WindowsEventLog

Créer une interface de journalisation en C #

Créez l'interface suivante pour stocker les journaux sous forme d'informations, d'avertissement, de débogage ou d'erreur.

interface publique ILogManager

    {

        void LogInformation (message de chaîne);

        void LogWarning (message sous forme de chaîne);

        void LogDebug (message de chaîne);

        void LogError (message de chaîne);

    }

Implémenter une classe NLogManager en C #

Ensuite, créez une classe nommée NLogManager qui étend l'interface ILogManager et implémente chacune de ses méthodes.

classe publique NLogManager: ILogManager

    {

        enregistreur NLog.ILogger statique privé =

LogManager.GetCurrentClassLogger ();

        public void LogDebug (message sous forme de chaîne)

        {

            throw new NotImplementedException ();

        }

        public void LogError (message sous forme de chaîne)

        {

            logger.Error (message);

        }

        public void LogInformation (message sous forme de chaîne)

        {

            throw new NotImplementedException ();

        }

        public void LogWarning (message sous forme de chaîne)

        {

            throw new NotImplementedException ();

        }

    }

Implémenter une méthode LogError en C #

Notez que par souci de simplicité, nous utiliserons la méthode LogError dans cet exemple et les autres méthodes de la classe NLogManager ne seront pas implémentées. Voyons maintenant comment nous pouvons utiliser NLog pour enregistrer des données dans EventLog. Modifiez la méthode LogError de la classe NLogManager comme indiqué ci-dessous:

public void LogError (message sous forme de chaîne)

    {

        Logger logger = LogManager.GetLogger ("EventLogTarget");

        var logEventInfo = new LogEventInfo (LogLevel.Error,

        logger.Name, message);

        logger.Log (logEventInfo);

    }

Notez que EventLogTarget est juste le nom de la cible du journal pour EventLog, qui doit être défini dans le fichier de configuration nlog.config. La classe LogEventInfo est votre événement de journal, c'est-à-dire qu'elle représente l'événement de journal. À son constructeur, vous devez transmettre le niveau de journalisation, le nom de l'enregistreur et le message à journaliser.

Configurer NLog pour enregistrer les données dans EventLog en C #

Pour configurer NLog par programme pour enregistrer les données dans EventLog, vous pouvez utiliser le code suivant:

var config = new NLog.Config.LoggingConfiguration ();

var logEventLog = new NLog.Targets.EventLogTarget ("EventLogTarget");

config.AddRule (NLog.LogLevel.Info, NLog.LogLevel.Error, logEventLog);

NLog.LogManager.Configuration = config;

Exemple complet de NLogManager en C #

Le code source complet de la classe NLogManager est donné ci-dessous pour votre référence:

classe publique NLogManager: ILogManager

    {

        enregistreur NLog.ILogger statique privé =

LogManager.GetCurrentClassLogger ();

        public void LogDebug (message sous forme de chaîne)

        {

            logger.Debug (message);

        }

public void LogError (message sous forme de chaîne)

        {

Logger logger = LogManager.GetLogger ("EventLogTarget");

var logEventInfo = new LogEventInfo (LogLevel.Error,

logger.Name, message);

logger.Log (logEventInfo);

        }

        public void LogInformation (message sous forme de chaîne)

        {

            logger.Info (message);

        }

        public void LogWarning (message sous forme de chaîne)

        {

            logger.Warn (message);

        }

    }

Pour tirer parti de l'instance de NLogManager dans les contrôleurs, vous devez en ajouter une instance dans la méthode ConfigureServices comme indiqué dans l'extrait de code ci-dessous.

services.AddSingleton ();

Lorsque vous lancez l'Observateur d'événements Windows, vous pouvez voir le message d'erreur enregistré comme indiqué dans la capture d'écran ci-dessous.

Le journal des événements Windows est généralement utilisé pour enregistrer les événements système, le trafic réseau et les données associées telles que la sécurité, les performances, etc. Vous pouvez tirer parti du journal des événements Windows comme cible du journal pour stocker les données de votre application. Si votre application s'exécute uniquement sous Windows, le journal des événements Windows est une option intéressante pour stocker les données du journal des événements de votre application.

Comment faire plus en C #:

  • Comment utiliser ArrayPool et MemoryPool en C #
  • Comment utiliser la classe Buffer en C #
  • Comment utiliser HashSet en C #
  • Comment utiliser des paramètres nommés et facultatifs en C #
  • Comment comparer le code C # à l'aide de BenchmarkDotNet
  • Comment utiliser des interfaces fluides et le chaînage de méthodes en C #
  • Comment tester des méthodes statiques en C #
  • Comment refactoriser des objets Dieu en C #
  • Comment utiliser ValueTask en C #
  • Comment utiliser l'immuabilité en C
  • Comment utiliser const, readonly et static en C #
  • Comment utiliser les annotations de données en C #
  • Comment travailler avec les GUID en C # 8
  • Quand utiliser une classe abstraite ou une interface en C #
  • Comment travailler avec AutoMapper en C #
  • Comment utiliser les expressions lambda en C #
  • Comment travailler avec les délégués Action, Func et Predicate en C #
  • Comment travailler avec des délégués en C #
  • Comment implémenter un simple logger en C #
  • Comment travailler avec des attributs en C #
  • Comment travailler avec log4net en C #
  • Comment implémenter le modèle de conception de référentiel en C #
  • Comment travailler avec la réflexion en C #
  • Comment travailler avec Filesystemwatcher en C #
  • Comment effectuer une initialisation différée en C #
  • Comment travailler avec MSMQ en C #
  • Comment travailler avec des méthodes d'extension en C #
  • Comment utiliser les expressions lambda en C #
  • Quand utiliser le mot clé volatile en C #
  • Comment utiliser le mot clé yield en C #
  • Comment implémenter le polymorphisme en C #
  • Comment créer votre propre planificateur de tâches en C #
  • Comment travailler avec RabbitMQ en C #
  • Comment travailler avec un tuple en C #
  • Explorer les méthodes virtuelles et abstraites en C #
  • Comment utiliser l'ORM Dapper en C #
  • Comment utiliser le modèle de conception de poids mouche en C #