So protokollieren Sie Daten im Windows-Ereignisprotokoll in C #

Das Windows-Betriebssystem protokolliert Daten im Windows-Ereignisprotokoll, wenn ein Problem auftritt. Sie können diese Daten mit der Windows-Ereignisanzeige anzeigen. Dieser Artikel beschreibt, wie Sie programmgesteuert mit dem Windows-Ereignisprotokoll in C # arbeiten können.

Um mit den in diesem Artikel bereitgestellten Codebeispielen arbeiten zu können, muss Visual Studio 2019 auf Ihrem System installiert sein. Wenn Sie noch keine Kopie haben, können Sie Visual Studio 2019 hier herunterladen.

Erstellen Sie ein .NET Core-Konsolenanwendungsprojekt in Visual Studio

Zunächst erstellen wir ein .NET Core-Konsolenanwendungsprojekt in Visual Studio. Angenommen, Visual Studio 2019 ist auf Ihrem System installiert, führen Sie die folgenden Schritte aus, um ein neues .NET Core-Konsolenanwendungsprojekt in Visual Studio zu erstellen.

  1. Starten Sie die Visual Studio-IDE.
  2. Klicken Sie auf "Neues Projekt erstellen".
  3. Wählen Sie im Fenster "Neues Projekt erstellen" aus der Liste der angezeigten Vorlagen "Konsolen-App (.NET Core)" aus.
  4. Weiter klicken.
  5. Geben Sie im nächsten Fenster "Konfigurieren Sie Ihr neues Projekt" den Namen und den Speicherort für das neue Projekt an.
  6. Klicken Sie auf Erstellen.

Dadurch wird ein neues .NET Core-Konsolenanwendungsprojekt in Visual Studio 2019 erstellt. In diesem Projekt arbeiten wir mit dem Windows-Ereignisprotokoll in den folgenden Abschnitten dieses Artikels.

Installieren Sie das EventLog NuGet-Paket

Um mit dem Windows-Ereignisprotokoll in .NET Core-Anwendungen arbeiten zu können, sollten Sie das Paket Microsoft.Extensions.Logging.EventLog von NuGet installieren. Sie können dies entweder über den NuGet Package Manager in der Visual Studio 2019-IDE oder durch Ausführen des folgenden Befehls in der NuGet Package Manager-Konsole tun:

Installationspaket Microsoft.Extensions.Logging.EventLog

Erstellen Sie eine Instanz der EventLog-Klasse in C #

Mit dem folgenden Code können Sie eine Instanz der EventLog-Klasse erstellen und einen Eintrag in das Windows-Ereignisprotokoll schreiben:

EventLog eventLog = new EventLog ();

eventLog.Source = "MyEventLogTarget";

eventLog.WriteEntry ("Dies ist eine Testnachricht.", EventLogEntryType.Information);

Schreiben Sie in eine EventLog-Instanz in C #

Wenn Sie Daten aus Ihrer Anwendung in dieser EventLog-Instanz protokollieren möchten, können Sie den folgenden Code verwenden:

string message = "Dies ist eine Testnachricht.";

using (EventLog eventLog = neues EventLog ("Anwendung"))

{

    eventLog.Source = "Anwendung";

    eventLog.WriteEntry (Nachricht, EventLogEntryType.Information);

}}

Löschen Sie eine EventLog-Instanz in C #

Zum Löschen der EventLog-Instanz können Sie den folgenden Code verwenden:

EventLog eventLog = new EventLog ();

eventLog.Source = "MyEventLogSource";

eventLog.Clear ();

Das folgende Codefragment kann zum Löschen eines Ereignisprotokolls verwendet werden.

if (EventLog.Exists ("MyEventLogTarget"))

{

   EventLog.Delete ("MyEventLogTarget");

}}

Lesen Sie EventLog-Einträge in C #

Sie können alle Protokolleinträge mit dem unten angegebenen Codeausschnitt lesen:

EventLog eventLog = new EventLog ();

eventLog.Log = "MyEventLogTarget";

foreach (EventLogEntry-Eintrag in eventLog.Entries)

   // Schreiben Sie hier Ihren benutzerdefinierten Code

}}

Verwenden Sie NLog, um Protokolldaten in C # in EventLog zu schreiben

Jetzt nutzen wir das NLog.WindowsEventLog-Paket. Mit diesem Paket können wir NLog verwenden, um Protokolldaten an EventLog zu senden, während wir in der .NET Core-Umgebung arbeiten.

NLog.WindowsEventLog fasst die Feinheiten der Verbindung zu EventLog und der Arbeit mit EventLog von ASP.NET Core zusammen. Sie müssen nur NLog-Methoden aufrufen, wie Sie es normalerweise tun.

Fügen Sie Ihrem Projekt das folgende Paket hinzu, da wir NLog zum Protokollieren von Daten in EventLog verwenden:

Installationspaket NLog.WindowsEventLog

Erstellen Sie eine Protokollierungsschnittstelle in C #

Erstellen Sie die folgende Schnittstelle, um die Protokolle als Informationen, Warnung, Debug oder Fehler zu speichern.

öffentliche Schnittstelle ILogManager

    {

        void LogInformation (String-Nachricht);

        void LogWarning (String-Nachricht);

        void LogDebug (String-Nachricht);

        void LogError (String-Nachricht);

    }}

Implementieren Sie eine NLogManager-Klasse in C #

Erstellen Sie als Nächstes eine Klasse mit dem Namen NLogManager, die die ILogManager-Schnittstelle erweitert und jede ihrer Methoden implementiert.

öffentliche Klasse NLogManager: ILogManager

    {

        private static NLog.ILogger logger =

LogManager.GetCurrentClassLogger ();

        public void LogDebug (String-Nachricht)

        {

            neue NotImplementedException () auslösen;

        }}

        public void LogError (Zeichenfolgenachricht)

        {

            logger.Error (Nachricht);

        }}

        public void LogInformation (String-Nachricht)

        {

            neue NotImplementedException () auslösen;

        }}

        public void LogWarning (Zeichenfolgenachricht)

        {

            neue NotImplementedException () auslösen;

        }}

    }}

Implementieren Sie eine LogError-Methode in C #

Beachten Sie, dass der Einfachheit halber in diesem Beispiel die LogError-Methode verwendet wird und die anderen Methoden der NLogManager-Klasse nicht implementiert werden. Lassen Sie uns nun verstehen, wie wir NLog verwenden können, um Daten in EventLog zu protokollieren. Ändern Sie die LogError-Methode der NLogManager-Klasse wie folgt:

public void LogError (Zeichenfolgenachricht)

    {

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

        var logEventInfo = new LogEventInfo (LogLevel.Error,

        logger.Name, message);

        logger.Log (logEventInfo);

    }}

Beachten Sie, dass EventLogTarget nur der Name des Protokollziels für EventLog ist, das in der Konfigurationsdatei nlog.config definiert werden muss. Die LogEventInfo-Klasse ist Ihr Protokollereignis, dh sie repräsentiert das Protokollereignis. An den Konstruktor sollten Sie die Protokollebene, den Namen des Protokollierers und die zu protokollierende Nachricht übergeben.

Konfigurieren Sie NLog so, dass Daten in C # in EventLog protokolliert werden.

Um NLog programmgesteuert so zu konfigurieren, dass Daten in EventLog protokolliert werden, können Sie den folgenden Code verwenden:

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;

Vollständiges NLogManager-Beispiel in C #

Der vollständige Quellcode der NLogManager-Klasse wird unten als Referenz angegeben:

öffentliche Klasse NLogManager: ILogManager

    {

        private static NLog.ILogger logger =

LogManager.GetCurrentClassLogger ();

        public void LogDebug (String-Nachricht)

        {

            logger.Debug (Nachricht);

        }}

public void LogError (Zeichenfolgenachricht)

        {

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

var logEventInfo = new LogEventInfo (LogLevel.Error,

logger.Name, message);

logger.Log (logEventInfo);

        }}

        public void LogInformation (String-Nachricht)

        {

            logger.Info (Nachricht);

        }}

        public void LogWarning (Zeichenfolgenachricht)

        {

            logger.Warn (Nachricht);

        }}

    }}

Um die NLogManager-Instanz in den Controllern zu nutzen, sollten Sie eine Instanz davon in die ConfigureServices-Methode einfügen, wie im folgenden Code-Snippet gezeigt.

services.AddSingleton ();

Wenn Sie die Windows-Ereignisanzeige starten, wird die dort protokollierte Fehlermeldung angezeigt (siehe Abbildung unten).

Das Windows-Ereignisprotokoll wird normalerweise zum Aufzeichnen von Systemereignissen, Netzwerkverkehr und zugehörigen Daten wie Sicherheit, Leistung usw. verwendet. Sie können das Windows-Ereignisprotokoll als Protokollziel zum Speichern der Daten Ihrer Anwendung verwenden. Wenn Ihre Anwendung nur unter Windows ausgeführt wird, ist das Windows-Ereignisprotokoll eine gute Option zum Speichern der Ereignisprotokolldaten Ihrer Anwendung.

So machen Sie mehr in C #:

  • Verwendung von ArrayPool und MemoryPool in C #
  • Verwendung der Buffer-Klasse in C #
  • Verwendung von HashSet in C #
  • Verwendung benannter und optionaler Parameter in C #
  • Benchmarking von C # -Code mit BenchmarkDotNet
  • Verwendung fließender Schnittstellen und Methodenverkettung in C #
  • So testen Sie statische Methoden in C #
  • Wie man Gottobjekte in C # umgestaltet
  • Verwendung von ValueTask in C #
  • Verwendung der Unveränderlichkeit in C.
  • Verwendung von const, readonly und static in C #
  • Verwendung von Datenanmerkungen in C #
  • So arbeiten Sie mit GUIDs in C # 8
  • Wann wird eine abstrakte Klasse im Vergleich zur Schnittstelle in C # verwendet?
  • So arbeiten Sie mit AutoMapper in C #
  • Verwendung von Lambda-Ausdrücken in C #
  • So arbeiten Sie mit Action-, Func- und Predicate-Delegaten in C #
  • So arbeiten Sie mit Delegierten in C #
  • So implementieren Sie einen einfachen Logger in C #
  • So arbeiten Sie mit Attributen in C #
  • So arbeiten Sie mit log4net in C #
  • So implementieren Sie das Repository-Entwurfsmuster in C #
  • Wie man mit Reflexion in C # arbeitet
  • So arbeiten Sie mit dem Dateisystemwatcher in C #
  • So führen Sie eine verzögerte Initialisierung in C # durch
  • So arbeiten Sie mit MSMQ in C #
  • So arbeiten Sie mit Erweiterungsmethoden in C #
  • Wie wir Lambda-Ausdrücke in C #
  • Wann wird das flüchtige Schlüsselwort in C # verwendet?
  • Verwendung des Schlüsselwortsield in C #
  • So implementieren Sie Polymorphismus in C #
  • So erstellen Sie Ihren eigenen Taskplaner in C #
  • So arbeiten Sie mit RabbitMQ in C #
  • So arbeiten Sie mit einem Tupel in C #
  • Erkundung virtueller und abstrakter Methoden in C #
  • Verwendung des Dapper ORM in C #
  • Verwendung des Entwurfsmusters im Fliegengewicht in C #