Как да регистрирате данни в Windows Event Log в C #

Операционната система Windows регистрира данни в дневника на събитията на Windows, когато възникне проблем. Можете да прегледате тези данни с помощта на инструмента за преглед на събития на Windows. Тази статия обсъжда как можете програмно да работите с регистрационния файл на Windows в C #.

За да работите с примерите за кодове, предоставени в тази статия, трябва да имате Visual Studio 2019 инсталиран във вашата система. Ако все още нямате копие, можете да изтеглите Visual Studio 2019 тук.

Създайте проект за приложение на конзола .NET Core в Visual Studio

Първо, нека създадем проект за приложение на конзола .NET Core в Visual Studio. Ако приемем, че Visual Studio 2019 е инсталиран във вашата система, следвайте стъпките, описани по-долу, за да създадете нов проект за приложение на конзола .NET Core в Visual Studio.

  1. Стартирайте Visual Studio IDE.
  2. Кликнете върху „Създаване на нов проект“.
  3. В прозореца „Създаване на нов проект“ изберете „Console App (.NET Core)“ от показания списък с шаблони.
  4. Щракнете върху Напред.
  5. В показания след това прозорец „Конфигуриране на вашия нов проект“ посочете името и местоположението на новия проект.
  6. Щракнете върху Създаване.

Това ще създаде нов проект за приложение на конзола .NET Core в Visual Studio 2019. Ще използваме този проект за работа с регистрационния файл на събитията на Windows в следващите раздели на тази статия.

Инсталирайте пакета EventLog NuGet

За да можете да работите с Windows Event Log в приложенията .NET Core, трябва да инсталирате пакета Microsoft.Extensions.Logging.EventLog от NuGet. Можете да направите това или чрез NuGet Package Manager вътре в IDE на Visual Studio 2019, или като изпълните следната команда в конзолата NuGet Package Manager:

Инсталирайте пакета Microsoft.Extensions.Logging.EventLog

Създайте екземпляр на класа EventLog в C #

За да създадете екземпляр на класа EventLog и да напишете запис в дневника на събитията на Windows, можете да използвате следния код:

EventLog eventLog = нов EventLog ();

eventLog.Source = "MyEventLogTarget";

eventLog.WriteEntry ("Това е тестово съобщение.", EventLogEntryType.Information);

Пишете в екземпляр на EventLog в C #

Ако искате да регистрирате данни към този екземпляр на EventLog от вашето приложение, можете да използвате следния код:

string message = "Това е тестово съобщение.";

използвайки (EventLog eventLog = нов EventLog ("Приложение"))

{

    eventLog.Source = "Приложение";

    eventLog.WriteEntry (съобщение, EventLogEntryType.Information);

}

Изчистване на екземпляр на EventLog в C #

За да изчистите екземпляра на EventLog, можете да използвате следния код:

EventLog eventLog = нов EventLog ();

eventLog.Source = "MyEventLogSource";

eventLog.Clear ();

Следният кодов фрагмент може да се използва за изтриване на дневник на събития.

if (EventLog.Exists ("MyEventLogTarget"))

{

   EventLog.Delete ("MyEventLogTarget");

}

Прочетете записите на EventLog в C #

Можете да прочетете всички записи в дневника, като използвате кодовия фрагмент, даден по-долу:

EventLog eventLog = нов EventLog ();

eventLog.Log = "MyEventLogTarget";

foreach (EventLogEntry запис в eventLog.Entries)

   // Напишете вашия персонализиран код тук

}

Използвайте NLog, за да запишете регистрационни данни в EventLog в C #

Сега ще се възползваме от пакета NLog.WindowsEventLog. Този пакет ще ни позволи да използваме NLog за изпращане на регистрационни данни към EventLog, докато работим от средата .NET Core.

NLog.WindowsEventLog капсулира тънкостите на свързване към EventLog и работа с EventLog от ASP.NET Core. Просто трябва да извикате NLog методи, както обикновено.

Тъй като ще използваме NLog за регистриране на данни в EventLog, добавете следния пакет към вашия проект:

Инсталирайте пакета NLog.WindowsEventLog

Създайте интерфейс за регистриране в C #

Създайте следния интерфейс, за да съхранявате дневниците като информация, предупреждение, отстраняване на грешки или грешка.

публичен интерфейс ILogManager

    {

        void LogInformation (низ съобщение);

        void LogWarning (низ съобщение);

        void LogDebug (низ съобщение);

        void LogError (низ съобщение);

    }

Внедрете клас NLogManager в C #

След това създайте клас с име NLogManager, който разширява интерфейса ILogManager и реализира всеки от методите му.

публичен клас NLogManager: ILogManager

    {

        частен статичен NLog.ILogger регистратор =

LogManager.GetCurrentClassLogger ();

        public void LogDebug (низ съобщение)

        {

            хвърли нов NotImplementedException ();

        }

        public void LogError (низ съобщение)

        {

            logger.Error (съобщение);

        }

        публична невалидна информация за вход (низ съобщение)

        {

            хвърли нов NotImplementedException ();

        }

        public void LogWarning (низ съобщение)

        {

            хвърли нов NotImplementedException ();

        }

    }

Внедрете метод LogError в C #

Имайте предвид, че за улеснение ще използваме метода LogError в този пример и другите методи от класа NLogManager няма да бъдат внедрени. Нека сега разберем как можем да използваме NLog за регистриране на данни в EventLog. Променете метода LogError на класа NLogManager, както е показано по-долу:

public void LogError (низ съобщение)

    {

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

        var logEventInfo = нов LogEventInfo (LogLevel.Error,

        logger.Name, съобщение);

        logger.Log (logEventInfo);

    }

Имайте предвид, че EventLogTarget е само името на целта на регистрационния файл за EventLog, което трябва да бъде дефинирано в конфигурационния файл nlog.config. Класът LogEventInfo е вашето събитие в дневника, т.е. той представлява събитието в дневника. Към неговия конструктор трябва да предадете нивото на регистрационния файл, името на регистратора и съобщението, което трябва да бъде регистрирано.

Конфигурирайте NLog да регистрира данни в EventLog в C #

За да конфигурирате NLog програмно за регистриране на данни в EventLog, можете да използвате следния код:

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

var logEventLog = нов NLog.Targets.EventLogTarget ("EventLogTarget");

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

NLog.LogManager.Configuration = config;

Попълнете примера на NLogManager в C #

Пълният изходен код на класа NLogManager е даден по-долу за справка:

публичен клас NLogManager: ILogManager

    {

        частен статичен NLog.ILogger регистратор =

LogManager.GetCurrentClassLogger ();

        public void LogDebug (низ съобщение)

        {

            logger.Debug (съобщение);

        }

public void LogError (низ съобщение)

        {

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

var logEventInfo = нов LogEventInfo (LogLevel.Error,

logger.Name, съобщение);

logger.Log (logEventInfo);

        }

        публична невалидна информация за вход (низ съобщение)

        {

            logger.Info (съобщение);

        }

        public void LogWarning (низ съобщение)

        {

            logger.Warn (съобщение);

        }

    }

За да използвате екземпляра NLogManager в контролерите, трябва да добавите негов екземпляр в метода ConfigureServices, както е показано в кодовия фрагмент, даден по-долу.

услуги.AddSingleton ();

Когато стартирате Windows Event Viewer, можете да видите съобщението за грешка, регистрирано там, както е показано на екранната снимка по-долу.

Дневникът на събитията на Windows обикновено се използва за записване на системни събития, мрежов трафик и свързани данни като сигурност, производителност и др. Можете да се възползвате от дневника на събитията на Windows като цел на дневника за съхраняване на данните на вашето приложение. Ако вашето приложение работи само под Windows, дневникът на събитията на Windows е добра опция за съхраняване на данните от дневника на събитията на вашето приложение.

Как да направите повече в C #:

  • Как да използвам ArrayPool и MemoryPool в C #
  • Как да използвам клас Buffer в C #
  • Как да използвам HashSet в C #
  • Как да използваме имена и незадължителни параметри в C #
  • Как да сравняваме C # кода с помощта на BenchmarkDotNet
  • Как да използвам плавни интерфейси и вериги на методи в C #
  • Как да тествате статични методи в C #
  • Как да рефакторирам Бог обекти в C #
  • Как да използвам ValueTask в C #
  • Как да използваме неизменност в C
  • Как да използвам const, readonly и static в C #
  • Как да използвам анотации на данни в C #
  • Как да работите с GUID в C # 8
  • Кога да се използва абстрактен клас срещу интерфейс в C #
  • Как да работя с AutoMapper в C #
  • Как да използвам ламбда изрази в C #
  • Как да работя с Action, Func и Predicate делегати в C #
  • Как да работя с делегати в C #
  • Как да внедрите прост регистратор в C #
  • Как да работя с атрибути в C #
  • Как да работя с log4net в C #
  • Как да приложим шаблона за проектиране на хранилището в C #
  • Как да работя с отражение в C #
  • Как да работя с файлова система за наблюдение в C #
  • Как да извършите мързелива инициализация в C #
  • Как да работите с MSMQ в C #
  • Как да работя с методи за разширение в C #
  • Как да използваме ламбда изрази в C #
  • Кога да се използва летливата ключова дума в C #
  • Как да използвам ключовата дума yield в C #
  • Как да приложим полиморфизъм в C #
  • Как да изградите свой собствен планировчик на задачи в C #
  • Как да работя с RabbitMQ в C #
  • Как да работите с кортеж в C #
  • Проучване на виртуални и абстрактни методи в C #
  • Как да използваме Dapper ORM в C #
  • Как да използвам шаблона за дизайн на мухата в C #