Programování

Jak protokolovat data do protokolu událostí systému Windows v C #

Operační systém Windows přihlásí data do protokolu událostí Windows, kdykoli nastane problém. Tato data můžete zobrazit pomocí nástroje Prohlížeč událostí Windows. Tento článek popisuje, jak můžete programově pracovat s protokolem událostí Windows v C #.

Chcete-li pracovat s příklady kódu uvedenými v tomto článku, měli byste mít ve svém systému nainstalovanou Visual Studio 2019. Pokud ještě nemáte kopii, můžete si stáhnout Visual Studio 2019 zde.

Vytvořte projekt aplikace konzoly .NET Core v sadě Visual Studio

Nejprve si vytvořme projekt konzolové aplikace .NET Core v sadě Visual Studio. Za předpokladu, že je ve vašem systému nainstalovaná sada Visual Studio 2019, postupujte podle níže uvedených kroků a vytvořte nový projekt konzolové aplikace .NET Core v sadě Visual Studio.

  1. Spusťte Visual Studio IDE.
  2. Klikněte na „Vytvořit nový projekt“.
  3. V okně „Vytvořit nový projekt“ vyberte ze zobrazeného seznamu šablon „Console App (.NET Core)“.
  4. Klikněte na Další.
  5. V dalším okně „Konfigurace nového projektu“ zadejte název a umístění nového projektu.
  6. Klikněte na Vytvořit.

Tím se vytvoří nový projekt aplikace konzoly .NET Core v sadě Visual Studio 2019. Tento projekt použijeme pro práci s protokolem událostí Windows v následujících částech tohoto článku.

Nainstalujte balíček EventLog NuGet

Aby bylo možné pracovat s protokolem událostí Windows v aplikacích .NET Core, měli byste si nainstalovat balíček Microsoft.Extensions.Logging.EventLog z NuGet. Můžete to udělat buď pomocí Správce balíčků NuGet uvnitř IDE sady Visual Studio 2019, nebo provedením následujícího příkazu v konzole Správce balíčků NuGet:

Instalační balíček Microsoft.Extensions.Logging.EventLog

Vytvořte instanci třídy EventLog v C #

Chcete-li vytvořit instanci třídy EventLog a zapsat záznam do protokolu událostí systému Windows, můžete použít následující kód:

EventLog eventLog = nový EventLog ();

eventLog.Source = "MyEventLogTarget";

eventLog.WriteEntry ("Toto je testovací zpráva.", EventLogEntryType.Information);

Zápis do instance EventLog v C #

Pokud byste chtěli z této aplikace protokolovat data do této instance EventLog, můžete použít následující kód:

string message = "Toto je testovací zpráva.";

pomocí (EventLog eventLog = nový EventLog ("aplikace"))

{

eventLog.Source = "Aplikace";

eventLog.WriteEntry (zpráva, EventLogEntryType.Information);

}

Vymazání instance EventLog v C #

Chcete-li vymazat instanci EventLog, můžete použít následující kód:

EventLog eventLog = nový EventLog ();

eventLog.Source = "MyEventLogSource";

eventLog.Clear ();

Následující fragment kódu lze použít k odstranění protokolu událostí.

if (EventLog.Exists ("MyEventLogTarget"))

{

EventLog.Delete ("MyEventLogTarget");

}

Číst položky EventLog v C #

Všechny položky protokolu si můžete přečíst pomocí níže uvedeného fragmentu kódu:

EventLog eventLog = nový EventLog ();

eventLog.Log = "MyEventLogTarget";

foreach (položka EventLogEntry v eventLog.Entries)

// Sem napište svůj vlastní kód

}

Použijte NLog k zápisu dat protokolu do EventLogu v C #

Nyní využijeme výhod balíčku NLog.WindowsEventLog. Tento balíček nám umožní používat NLog k odesílání dat protokolu do EventLogu při práci z prostředí .NET Core.

NLog.WindowsEventLog zapouzdřuje složitost připojení k EventLogu a práci s EventLogem z ASP.NET Core. Musíte jen zavolat metody NLog jako obvykle.

Protože k přihlášení dat do EventLogu použijeme NLog, přidejte do svého projektu následující balíček:

Instalační balíček NLog.WindowsEventLog

Vytvořte rozhraní protokolování v C #

Vytvořte následující rozhraní pro uložení protokolů jako informací, varování, ladění nebo chyby.

veřejné rozhraní ILogManager

    {

void LogInformation (řetězcová zpráva);

void LogWarning (textová zpráva);

void LogDebug (textová zpráva);

void LogError (textová zpráva);

    }

Implementujte třídu NLogManager v C #

Dále vytvořte třídu s názvem NLogManager, která rozšiřuje rozhraní ILogManager a implementuje každou z jejích metod.

veřejná třída NLogManager: ILogManager

    {

soukromý statický záznamník NLog.ILogger =

LogManager.GetCurrentClassLogger ();

public void LogDebug (řetězcová zpráva)

        {

hodit nový NotImplementedException ();

        }

public void LogError (textová zpráva)

        {

logger.Error (zpráva);

        }

public void LogInformation (řetězcová zpráva)

        {

hodit nový NotImplementedException ();

        }

public void LogWarning (řetězcová zpráva)

        {

hodit nový NotImplementedException ();

        }

    }

Implementujte metodu LogError v C #

Pro jednoduchost budeme v tomto příkladu používat metodu LogError a ostatní metody třídy NLogManager nebudou implementovány. Pojďme nyní pochopit, jak můžeme pomocí NLogu protokolovat data do EventLogu. Upravte metodu LogError třídy NLogManager, jak je znázorněno níže:

public void LogError (textová zpráva)

    {

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

var logEventInfo = nový LogEventInfo (LogLevel.Error,

jméno záznamníka, zpráva);

logger.Log (logEventInfo);

    }

Všimněte si, že EventLogTarget je pouze název cíle protokolu pro EventLog, který je třeba definovat v konfiguračním souboru nlog.config. Třída LogEventInfo je vaše událost protokolu, tj. Představuje událost protokolu. Jeho konstruktoru byste měli předat úroveň protokolu, název protokolovacího nástroje a zprávu, která se má protokolovat.

Nakonfigurujte NLog pro protokolování dat do EventLog v C #

Chcete-li programově konfigurovat NLog pro protokolování dat do EventLogu, můžete použít následující kód:

var config = nový NLog.Config.LoggingConfiguration ();

var logEventLog = nový NLog.Targets.EventLogTarget ("EventLogTarget");

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

NLog.LogManager.Configuration = config;

Kompletní příklad NLogManager v C #

Níže je uveden kompletní zdrojový kód třídy NLogManager:

veřejná třída NLogManager: ILogManager

    {

soukromý statický záznamník NLog.ILogger =

LogManager.GetCurrentClassLogger ();

public void LogDebug (řetězcová zpráva)

        {

logger.Debug (zpráva);

        }

public void LogError (textová zpráva)

        {

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

var logEventInfo = nový LogEventInfo (LogLevel.Error,

jméno záznamníka, zpráva);

logger.Log (logEventInfo);

        }

public void LogInformation (řetězcová zpráva)

        {

logger.Info (zpráva);

        }

public void LogWarning (řetězcová zpráva)

        {

logger.Warn (zpráva);

        }

    }

Chcete-li využít instanci NLogManager v řadičích, měli byste přidat její instanci v metodě ConfigureServices, jak je ukázáno ve fragmentu kódu uvedeném níže.

services.AddSingleton ();

Když spustíte Prohlížeč událostí Windows, uvidíte zde přihlášenou chybovou zprávu, jak je znázorněno na následujícím obrázku.

Protokol událostí systému Windows se obvykle používá k záznamu systémových událostí, síťového provozu a souvisejících dat, jako je zabezpečení, výkon atd. Protokol událostí systému Windows můžete využít jako cíl protokolu k uložení dat aplikace. Pokud je vaše aplikace spuštěna pouze v systému Windows, je protokol událostí systému Windows příjemnou volbou pro ukládání dat protokolu vaší aplikace.

Jak udělat více v C #:

  • Jak používat ArrayPool a MemoryPool v C #
  • Jak používat třídu Buffer v C #
  • Jak používat HashSet v C #
  • Jak používat pojmenované a volitelné parametry v C #
  • Jak srovnávat C # kód pomocí BenchmarkDotNet
  • Jak používat plynulá rozhraní a řetězení metod v C #
  • Jak testovat statické metody v C #
  • Jak refaktorovat Boží objekty v C #
  • Jak používat ValueTask v C #
  • Jak používat neměnnost v C.
  • Jak používat const, readonly a static v C #
  • Jak používat datové anotace v C #
  • Jak pracovat s identifikátory GUID v C # 8
  • Kdy použít abstraktní třídu vs. rozhraní v C #
  • Jak pracovat s AutoMapperem v C #
  • Jak používat výrazy lambda v C #
  • Jak pracovat s delegáty Action, Func a Predicate v C #
  • Jak pracovat s delegáty v C #
  • Jak implementovat jednoduchý záznamník v C #
  • Jak pracovat s atributy v C #
  • Jak pracovat s log4net v C #
  • Jak implementovat vzor návrhu úložiště v C #
  • Jak pracovat s odrazem v C #
  • Jak pracovat se souborovým systémem v C #
  • Jak provést línou inicializaci v C #
  • Jak pracovat s MSMQ v C #
  • Jak pracovat s metodami rozšíření v C #
  • Jak na nás lambda výrazy v C #
  • Kdy použít volatilní klíčové slovo v C #
  • Jak používat klíčové slovo výnos v C #
  • Jak implementovat polymorfismus v C #
  • Jak vytvořit svůj vlastní plánovač úloh v C #
  • Jak pracovat s RabbitMQ v C #
  • Jak pracovat s n-ticí v C #
  • Zkoumání virtuálních a abstraktních metod v C #
  • Jak používat Dapper ORM v C #
  • Jak používat návrhový vzor muší váhy v C #
$config[zx-auto] not found$config[zx-overlay] not found