Come registrare i dati nel registro eventi di Windows in C #

Il sistema operativo Windows registra i dati nel registro eventi di Windows ogni volta che si verifica un problema. È possibile visualizzare questi dati utilizzando lo strumento Visualizzatore eventi di Windows. In questo articolo viene illustrato come lavorare a livello di codice con il registro eventi di Windows in C #.

Per lavorare con gli esempi di codice forniti in questo articolo, dovresti avere Visual Studio 2019 installato nel tuo sistema. Se non hai già una copia, puoi scaricare Visual Studio 2019 qui.

Creare un progetto di applicazione console .NET Core in Visual Studio

Prima di tutto, creiamo un progetto di applicazione console .NET Core in Visual Studio. Supponendo che Visual Studio 2019 sia installato nel sistema, seguire i passaggi descritti di seguito per creare un nuovo progetto di applicazione console .NET Core in Visual Studio.

  1. Avvia l'IDE di Visual Studio.
  2. Fai clic su "Crea nuovo progetto".
  3. Nella finestra "Crea nuovo progetto", seleziona "App Console (.NET Core)" dall'elenco dei modelli visualizzati.
  4. Fare clic su Avanti.
  5. Nella finestra "Configura il tuo nuovo progetto" mostrata di seguito, specifica il nome e la posizione per il nuovo progetto.
  6. Fare clic su Crea.

Questo creerà un nuovo progetto di applicazione console .NET Core in Visual Studio 2019. Useremo questo progetto per lavorare con il registro eventi di Windows nelle sezioni successive di questo articolo.

Installa il pacchetto EventLog NuGet

Per poter lavorare con il registro eventi di Windows nelle applicazioni .NET Core, è necessario installare il pacchetto Microsoft.Extensions.Logging.EventLog da NuGet. Puoi farlo tramite NuGet Package Manager all'interno dell'IDE di Visual Studio 2019 o eseguendo il comando seguente nella console di NuGet Package Manager:

Pacchetto di installazione Microsoft.Extensions.Logging.EventLog

Crea un'istanza della classe EventLog in C #

Per creare un'istanza della classe EventLog e scrivere una voce nel registro eventi di Windows, è possibile utilizzare il codice seguente:

EventLog eventLog = nuovo EventLog ();

eventLog.Source = "MyEventLogTarget";

eventLog.WriteEntry ("Questo è un messaggio di prova.", EventLogEntryType.Information);

Scrivi in ​​un'istanza EventLog in C #

Se desideri registrare i dati in questa istanza EventLog dalla tua applicazione, puoi utilizzare il codice seguente:

string message = "Questo è un messaggio di prova.";

utilizzando (EventLog eventLog = new EventLog ("Applicazione"))

{

    eventLog.Source = "Applicazione";

    eventLog.WriteEntry (messaggio, EventLogEntryType.Information);

}

Cancella un'istanza EventLog in C #

Per cancellare l'istanza EventLog, puoi utilizzare il codice seguente:

EventLog eventLog = nuovo EventLog ();

eventLog.Source = "MyEventLogSource";

eventLog.Clear ();

Il seguente frammento di codice può essere utilizzato per eliminare un registro eventi.

if (EventLog.Exists ("MyEventLogTarget"))

{

   EventLog.Delete ("MyEventLogTarget");

}

Leggi le voci EventLog in C #

È possibile leggere tutte le voci di registro utilizzando lo snippet di codice fornito di seguito:

EventLog eventLog = nuovo EventLog ();

eventLog.Log = "MyEventLogTarget";

foreach (voce EventLogEntry in eventLog.Entries)

   // Scrivi qui il tuo codice personalizzato

}

Usa NLog per scrivere i dati di log in EventLog in C #

Ora ci avvantaggeremo del pacchetto NLog.WindowsEventLog. Questo pacchetto ci consentirà di utilizzare NLog per inviare i dati di registro a EventLog mentre si lavora dall'ambiente .NET Core.

NLog.WindowsEventLog incapsula le complessità della connessione a EventLog e dell'utilizzo di EventLog da ASP.NET Core. Devi solo chiamare i metodi NLog come fai normalmente.

Dato che utilizzeremo NLog per registrare i dati in EventLog, aggiungi il seguente pacchetto al tuo progetto:

Pacchetto di installazione NLog.WindowsEventLog

Creare un'interfaccia di registrazione in C #

Creare la seguente interfaccia per archiviare i log come informazioni, avvisi, debug o errori.

interfaccia pubblica ILogManager

    {

        void LogInformation (messaggio stringa);

        void LogWarning (stringa messaggio);

        void LogDebug (stringa messaggio);

        void LogError (stringa messaggio);

    }

Implementare una classe NLogManager in C #

Successivamente, crea una classe denominata NLogManager che estende l'interfaccia ILogManager e implementa ciascuno dei suoi metodi.

classe pubblica NLogManager: ILogManager

    {

        logger NLog.ILogger statico privato =

LogManager.GetCurrentClassLogger ();

        public void LogDebug (stringa messaggio)

        {

            lancia una nuova NotImplementedException ();

        }

        public void LogError (stringa messaggio)

        {

            logger.Error (messaggio);

        }

        public void LogInformation (messaggio di stringa)

        {

            lancia una nuova NotImplementedException ();

        }

        public void LogWarning (stringa messaggio)

        {

            lancia una nuova NotImplementedException ();

        }

    }

Implementare un metodo LogError in C #

Si noti che per semplicità utilizzeremo il metodo LogError in questo esempio e gli altri metodi della classe NLogManager non verranno implementati. Vediamo ora come possiamo usare NLog per registrare i dati in EventLog. Modificare il metodo LogError della classe NLogManager come mostrato di seguito:

public void LogError (stringa messaggio)

    {

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

        var logEventInfo = new LogEventInfo (LogLevel.Error,

        logger.Name, messaggio);

        logger.Log (logEventInfo);

    }

Notare che EventLogTarget è solo il nome della destinazione del registro per EventLog, che deve essere definito nel file di configurazione nlog.config. La classe LogEventInfo è il tuo evento di log, cioè rappresenta l'evento di log. Al suo costruttore è necessario passare il livello di log, il nome del logger e il messaggio da registrare.

Configurare NLog per registrare i dati in EventLog in C #

Per configurare NLog a livello di codice per registrare i dati in EventLog, è possibile utilizzare il codice seguente:

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;

Esempio di NLogManager completo in C #

Il codice sorgente completo della classe NLogManager è fornito di seguito come riferimento:

classe pubblica NLogManager: ILogManager

    {

        logger NLog.ILogger statico privato =

LogManager.GetCurrentClassLogger ();

        public void LogDebug (stringa messaggio)

        {

            logger.Debug (messaggio);

        }

public void LogError (stringa messaggio)

        {

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

var logEventInfo = new LogEventInfo (LogLevel.Error,

logger.Name, messaggio);

logger.Log (logEventInfo);

        }

        public void LogInformation (messaggio di stringa)

        {

            logger.Info (messaggio);

        }

        public void LogWarning (stringa messaggio)

        {

            logger.Warn (messaggio);

        }

    }

Per sfruttare l'istanza NLogManager nei controller è necessario aggiungerne un'istanza nel metodo ConfigureServices come mostrato nello snippet di codice riportato di seguito.

services.AddSingleton ();

Quando avvii il Visualizzatore eventi di Windows, puoi vedere il messaggio di errore registrato lì come mostrato nello screenshot qui sotto.

Il registro eventi di Windows viene in genere utilizzato per registrare eventi di sistema, traffico di rete e dati correlati come sicurezza, prestazioni, ecc. È possibile sfruttare il registro eventi di Windows come destinazione del registro per archiviare i dati dell'applicazione. Se la tua applicazione viene eseguita solo su Windows, il registro eventi di Windows è una buona opzione per archiviare i dati del registro eventi dell'applicazione.

Come fare di più in C #:

  • Come utilizzare ArrayPool e MemoryPool in C #
  • Come usare la classe Buffer in C #
  • Come usare HashSet in C #
  • Come usare parametri denominati e facoltativi in ​​C #
  • Come eseguire il benchmark del codice C # utilizzando BenchmarkDotNet
  • Come usare interfacce fluenti e concatenamento di metodi in C #
  • Come unit test dei metodi statici in C #
  • Come eseguire il refactoring di oggetti God in C #
  • Come usare ValueTask in C #
  • Come usare l'immutabilità in C
  • Come usare const, readonly e static in C #
  • Come usare le annotazioni dei dati in C #
  • Come lavorare con i GUID in C # 8
  • Quando usare una classe astratta e un'interfaccia in C #
  • Come lavorare con AutoMapper in C #
  • Come usare le espressioni lambda in C #
  • Come lavorare con i delegati Action, Func e Predicate in C #
  • Come lavorare con i delegati in C #
  • Come implementare un semplice logger in C #
  • Come lavorare con gli attributi in C #
  • Come lavorare con log4net in C #
  • Come implementare il modello di progettazione del repository in C #
  • Come lavorare con la riflessione in C #
  • Come lavorare con Filesystemwatcher in C #
  • Come eseguire l'inizializzazione pigra in C #
  • Come lavorare con MSMQ in C #
  • Come lavorare con i metodi di estensione in C #
  • Come utilizzare espressioni lambda in C #
  • Quando usare la parola chiave volatile in C #
  • Come utilizzare la parola chiave yield in C #
  • Come implementare il polimorfismo in C #
  • Come creare il proprio pianificatore di attività in C #
  • Come lavorare con RabbitMQ in C #
  • Come lavorare con una tupla in C #
  • Esplorazione di metodi virtuali e astratti in C #
  • Come utilizzare Dapper ORM in C #
  • Come utilizzare il modello di progettazione del peso mosca in C #