Programmering

Sådan logges data til Windows Event Log in C #

Windows-operativsystemet logger data i Windows Event Log, når der opstår et problem. Du kan se disse data ved hjælp af Windows Event Viewer-værktøjet. Denne artikel diskuterer, hvordan du programmatisk kan arbejde med Windows Event Log in C #.

For at arbejde med kodeeksemplerne i denne artikel skal du have Visual Studio 2019 installeret i dit system. Hvis du ikke allerede har en kopi, kan du downloade Visual Studio 2019 her.

Opret et .NET Core-konsolapplikationsprojekt i Visual Studio

Lad os først oprette et .NET Core-konsolapplikationsprojekt i Visual Studio. Forudsat at Visual Studio 2019 er installeret i dit system, skal du følge nedenstående trin for at oprette et nyt .NET Core-konsolapplikationsprojekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klik på "Opret nyt projekt."
  3. I vinduet "Opret nyt projekt" skal du vælge "Konsolapp (.NET Core)" fra listen over skabeloner, der vises.
  4. Klik på Næste.
  5. I vinduet "Konfigurer dit nye projekt", der vises nedenfor, skal du angive navnet og placeringen for det nye projekt.
  6. Klik på Opret.

Dette opretter et nyt .NET Core-konsolapplikationsprojekt i Visual Studio 2019. Vi bruger dette projekt til at arbejde med Windows-hændelsesloggen i de efterfølgende afsnit i denne artikel.

Installer EventLog NuGet-pakken

For at kunne arbejde med Windows Event Log in .NET Core-applikationer, skal du installere Microsoft.Extensions.Logging.EventLog-pakken fra NuGet. Du kan gøre dette enten via NuGet Package Manager inde i Visual Studio 2019 IDE eller ved at udføre følgende kommando i NuGet Package Manager Console:

Installationspakke Microsoft.Extensions.Logging.EventLog

Opret en forekomst af klassen EventLog i C #

For at oprette en forekomst af klassen EventLog og skrive en post til Windows Event Log kan du bruge følgende kode:

EventLog eventLog = ny EventLog ();

eventLog.Source = "MyEventLogTarget";

eventLog.WriteEntry ("Dette er en testmeddelelse.", EventLogEntryType.Information);

Skriv til en EventLog-forekomst i C #

Hvis du vil logge data til denne EventLog-forekomst fra din applikation, kan du bruge følgende kode:

string message = "Dette er en testmeddelelse.";

ved hjælp af (EventLog eventLog = new EventLog ("Application"))

{

eventLog.Source = "Applikation";

eventLog.WriteEntry (meddelelse, EventLogEntryType.Information);

}

Ryd en EventLog-forekomst i C #

For at rydde EventLog-forekomsten kan du bruge følgende kode:

EventLog eventLog = ny EventLog ();

eventLog.Source = "MyEventLogSource";

eventLog.Clear ();

Følgende kodestykke kan bruges til at slette en hændelseslog.

hvis (EventLog.Exists ("MyEventLogTarget"))

{

EventLog.Delete ("MyEventLogTarget");

}

Læs EventLog-poster i C #

Du kan læse alle logposter ved hjælp af nedenstående kodestykke:

EventLog eventLog = ny EventLog ();

eventLog.Log = "MyEventLogTarget";

foreach (EventLogEntry-post i eventLog.Entries)

// Skriv din brugerdefinerede kode her

}

Brug NLog til at skrive logdata til EventLog i C #

Nu drager vi fordel af NLog.WindowsEventLog-pakken. Denne pakke giver os mulighed for at bruge NLog til at sende logdata til EventLog, mens vi arbejder fra .NET Core-miljøet.

NLog.WindowsEventLog indkapsler besværlighederne ved at oprette forbindelse til EventLog og arbejde med EventLog fra ASP.NET Core. Du skal bare kalde NLog-metoder, som du normalt gør.

Da vi bruger NLog til at logge data til EventLog, skal du føje følgende pakke til dit projekt:

Installationspakke NLog.WindowsEventLog

Opret en logningsgrænseflade i C #

Opret følgende grænseflade for at gemme logfilerne som information, advarsel, fejlretning eller fejl.

offentlig grænseflade ILogManager

    {

ugyldig LogInformation (streng besked);

ugyldig LogWarning (streng besked);

ugyldigt LogDebug (strengmeddelelse);

ugyldig LogError (strengmeddelelse);

    }

Implementere en NLogManager-klasse i C #

Opret derefter en klasse ved navn NLogManager, der udvider ILogManager-grænsefladen og implementerer hver af dens metoder.

offentlig klasse NLogManager: ILogManager

    {

privat statisk NLog.ILogger logger =

LogManager.GetCurrentClassLogger ();

offentligt ugyldigt LogDebug (streng besked)

        {

smid ny NotImplementedException ();

        }

offentlig ugyldig LogError (streng besked)

        {

logger.Error (besked);

        }

offentlig ugyldig LogInformation (streng besked)

        {

smid ny NotImplementedException ();

        }

offentlig ugyldig LogWarning (streng besked)

        {

smid ny NotImplementedException ();

        }

    }

Implementere en LogError-metode i C #

Bemærk, at for enkelheds skyld bruger vi LogError-metoden i dette eksempel, og de andre metoder i NLogManager-klassen implementeres ikke. Lad os nu forstå, hvordan vi kan bruge NLog til at logge data til EventLog. Rediger LogError-metoden i NLogManager-klassen som vist nedenfor:

offentlig ugyldig LogError (streng besked)

    {

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

var logEventInfo = ny LogEventInfo (LogLevel.Error,

logger.Name, besked);

logger.Log (logEventInfo);

    }

Bemærk, at EventLogTarget bare er navnet på logmålet for EventLog, som skal defineres i konfigurationsfilen nlog.config. LogEventInfo-klassen er din loghændelse, dvs. den repræsenterer loghændelsen. Til sin konstruktør skal du videregive logniveauet, loggerens navn og den besked, der skal logges.

Konfigurer NLog til at logge data til EventLog i C #

For at konfigurere NLog programmatisk til at logge data til EventLog kan du bruge følgende kode:

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

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

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

NLog.LogManager.Configuration = config;

Komplet NLogManager-eksempel i C #

Den komplette kildekode for NLogManager-klassen er angivet nedenfor til din reference:

offentlig klasse NLogManager: ILogManager

    {

privat statisk NLog.ILogger logger =

LogManager.GetCurrentClassLogger ();

offentligt ugyldigt LogDebug (streng besked)

        {

logger.Debug (besked);

        }

offentlig ugyldig LogError (streng besked)

        {

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

var logEventInfo = ny LogEventInfo (LogLevel.Error,

logger.Name, besked);

logger.Log (logEventInfo);

        }

offentlig ugyldig LogInformation (streng besked)

        {

logger.Info (besked);

        }

offentlig ugyldig LogWarning (streng besked)

        {

logger.Warn (besked);

        }

    }

For at udnytte NLogManager-forekomsten i controllerne skal du tilføje en forekomst af den i ConfigureServices-metoden som vist i nedenstående kodestykke.

services.AddSingleton ();

Når du starter Windows Event Viewer, kan du se fejlmeddelelsen logget der som vist på skærmbilledet nedenfor.

Windows-hændelsesloggen bruges typisk til at registrere systemhændelser, netværkstrafik og relaterede data såsom sikkerhed, ydeevne osv. Du kan drage fordel af Windows-hændelsesloggen som et logmål til at gemme din applikations data. Hvis din applikation kun kører på Windows, er Windows Event Log en god mulighed for at gemme din applikations hændelseslogdata.

Sådan gør du mere i C #:

  • Sådan bruges ArrayPool og MemoryPool i C #
  • Sådan bruges bufferklassen i C #
  • Sådan bruges HashSet i C #
  • Sådan bruges navngivne og valgfri parametre i C #
  • Sådan benchmarkes C #-kode ved hjælp af BenchmarkDotNet
  • Sådan bruges flydende grænseflader og metodekædning i C #
  • Sådan enhedstest statiske metoder i C #
  • Sådan refaktorerer du Guds objekter i C #
  • Sådan bruges ValueTask i C #
  • Sådan bruges uforanderlighed i C
  • Sådan bruges const, readonly og static i C #
  • Sådan bruges datanoteringer i C #
  • Sådan arbejder du med GUID'er i C # 8
  • Hvornår skal man bruge en abstrakt klasse vs. interface i C #
  • Sådan arbejder du med AutoMapper i C #
  • Sådan bruges lambda-udtryk i C #
  • Sådan arbejder du med Action-, Func- og Predicate-delegerede i C #
  • Sådan arbejder du med delegerede i C #
  • Sådan implementeres en simpel logger i C #
  • Sådan arbejder du med attributter i C #
  • Sådan arbejder du med log4net i C #
  • Sådan implementeres depotdesignmønsteret i C #
  • Sådan arbejder du med refleksion i C #
  • Sådan arbejder du med filsystemwatcher i C #
  • Sådan udføres doven initialisering i C #
  • Sådan arbejder du med MSMQ i C #
  • Sådan arbejder du med udvidelsesmetoder i C #
  • Hvordan vi lambda-udtryk i C #
  • Hvornår skal du bruge det flygtige nøgleord i C #
  • Sådan bruges afkastnøgleordet i C #
  • Sådan implementeres polymorfisme i C #
  • Sådan bygger du din egen opgaveplanlægning i C #
  • Sådan arbejder du med RabbitMQ i C #
  • Sådan arbejder du med en tuple i C #
  • Udforskning af virtuelle og abstrakte metoder i C #
  • Sådan bruges Dapper ORM i C #
  • Sådan bruges designmønsteret med flyvægt i C #