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.
- Spusťte Visual Studio IDE.
- Klikněte na „Vytvořit nový projekt“.
- V okně „Vytvořit nový projekt“ vyberte ze zobrazeného seznamu šablon „Console App (.NET Core)“.
- Klikněte na Další.
- V dalším okně „Konfigurace nového projektu“ zadejte název a umístění nového projektu.
- 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 #