Cómo registrar datos en el registro de eventos de Windows en C #

El sistema operativo Windows registra datos en el Registro de eventos de Windows siempre que ocurre un problema. Puede ver estos datos con la herramienta Visor de eventos de Windows. Este artículo describe cómo puede trabajar mediante programación con el registro de eventos de Windows en C #.

Para trabajar con los ejemplos de código proporcionados en este artículo, debe tener Visual Studio 2019 instalado en su sistema. Si aún no tiene una copia, puede descargar Visual Studio 2019 aquí.

Crear un proyecto de aplicación de consola .NET Core en Visual Studio

En primer lugar, creemos un proyecto de aplicación de consola .NET Core en Visual Studio. Suponiendo que Visual Studio 2019 esté instalado en su sistema, siga los pasos que se describen a continuación para crear un nuevo proyecto de aplicación de consola .NET Core en Visual Studio.

  1. Inicie el IDE de Visual Studio.
  2. Haga clic en "Crear nuevo proyecto".
  3. En la ventana "Crear nuevo proyecto", seleccione "Aplicación de consola (.NET Core)" en la lista de plantillas que se muestran.
  4. Haga clic en Siguiente.
  5. En la ventana "Configure su nuevo proyecto" que se muestra a continuación, especifique el nombre y la ubicación del nuevo proyecto.
  6. Haga clic en Crear.

Esto creará un nuevo proyecto de aplicación de consola .NET Core en Visual Studio 2019. Usaremos este proyecto para trabajar con el registro de eventos de Windows en las secciones siguientes de este artículo.

Instalar el paquete EventLog NuGet

Para poder trabajar con el registro de eventos de Windows en las aplicaciones .NET Core, debe instalar el paquete Microsoft.Extensions.Logging.EventLog de NuGet. Puede hacerlo a través del Administrador de paquetes NuGet dentro del IDE de Visual Studio 2019 o ejecutando el siguiente comando en la Consola del Administrador de paquetes NuGet:

Paquete de instalación Microsoft.Extensions.Logging.EventLog

Cree una instancia de la clase EventLog en C #

Para crear una instancia de la clase EventLog y escribir una entrada en el registro de eventos de Windows, puede usar el siguiente código:

EventLog eventLog = nuevo EventLog ();

eventLog.Source = "MyEventLogTarget";

eventLog.WriteEntry ("Este es un mensaje de prueba.", EventLogEntryType.Information);

Escribir en una instancia de EventLog en C #

Si desea registrar datos en esta instancia de EventLog desde su aplicación, puede usar el siguiente código:

string message = "Este es un mensaje de prueba.";

usando (EventLog eventLog = new EventLog ("Aplicación"))

{

    eventLog.Source = "Aplicación";

    eventLog.WriteEntry (mensaje, EventLogEntryType.Information);

}

Borrar una instancia de EventLog en C #

Para borrar la instancia de EventLog, puede usar el siguiente código:

EventLog eventLog = nuevo EventLog ();

eventLog.Source = "MyEventLogSource";

eventLog.Clear ();

El siguiente fragmento de código se puede utilizar para eliminar un registro de eventos.

si (EventLog.Exists ("MyEventLogTarget"))

{

   EventLog.Delete ("MyEventLogTarget");

}

Leer entradas de EventLog en C #

Puede leer todas las entradas del registro utilizando el fragmento de código que se proporciona a continuación:

EventLog eventLog = nuevo EventLog ();

eventLog.Log = "MyEventLogTarget";

foreach (entrada EventLogEntry en eventLog.Entries)

   // Escribe tu código personalizado aquí

}

Use NLog para escribir datos de registro en EventLog en C #

Ahora aprovecharemos el paquete NLog.WindowsEventLog. Este paquete nos permitirá usar NLog para enviar datos de registro a EventLog mientras trabajamos desde el entorno .NET Core.

NLog.WindowsEventLog encapsula las complejidades de conectarse a EventLog y trabajar con EventLog desde ASP.NET Core. Solo tiene que llamar a los métodos NLog como lo hace normalmente.

Como usaremos NLog para registrar datos en EventLog, agregue el siguiente paquete a su proyecto:

Paquete de instalación NLog.WindowsEventLog

Cree una interfaz de registro en C #

Cree la siguiente interfaz para almacenar los registros como información, advertencia, depuración o error.

interfaz pública ILogManager

    {

        Void LogInformation (mensaje de cadena);

        void LogWarning (mensaje de cadena);

        void LogDebug (mensaje de cadena);

        void LogError (mensaje de cadena);

    }

Implementar una clase NLogManager en C #

A continuación, cree una clase llamada NLogManager que amplíe la interfaz de ILogManager e implemente cada uno de sus métodos.

clase pública NLogManager: ILogManager

    {

        registrador privado estático NLog.ILogger =

LogManager.GetCurrentClassLogger ();

        public void LogDebug (mensaje de cadena)

        {

            lanzar nueva NotImplementedException ();

        }

        public void LogError (mensaje de cadena)

        {

            logger.Error (mensaje);

        }

        public void LogInformation (mensaje de cadena)

        {

            lanzar nueva NotImplementedException ();

        }

        public void LogWarning (mensaje de cadena)

        {

            lanzar nueva NotImplementedException ();

        }

    }

Implementar un método LogError en C #

Tenga en cuenta que, en aras de la simplicidad, usaremos el método LogError en este ejemplo y los otros métodos de la clase NLogManager no se implementarán. Veamos ahora cómo podemos usar NLog para registrar datos en EventLog. Modifique el método LogError de la clase NLogManager como se muestra a continuación:

public void LogError (mensaje de cadena)

    {

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

        var logEventInfo = new LogEventInfo (LogLevel.Error,

        logger.Name, mensaje);

        logger.Log (logEventInfo);

    }

Tenga en cuenta que EventLogTarget es solo el nombre del destino del registro para EventLog, que debe definirse en el archivo de configuración nlog.config. La clase LogEventInfo es su evento de registro, es decir, representa el evento de registro. A su constructor debe pasar el nivel de registro, el nombre del registrador y el mensaje a registrar.

Configurar NLog para registrar datos en EventLog en C #

Para configurar NLog mediante programación para registrar datos en EventLog, puede usar el siguiente código:

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;

Ejemplo completo de NLogManager en C #

El código fuente completo de la clase NLogManager se proporciona a continuación para su referencia:

clase pública NLogManager: ILogManager

    {

        registrador privado estático NLog.ILogger =

LogManager.GetCurrentClassLogger ();

        public void LogDebug (mensaje de cadena)

        {

            logger.Debug (mensaje);

        }

public void LogError (mensaje de cadena)

        {

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

var logEventInfo = new LogEventInfo (LogLevel.Error,

logger.Name, mensaje);

logger.Log (logEventInfo);

        }

        public void LogInformation (mensaje de cadena)

        {

            logger.Info (mensaje);

        }

        public void LogWarning (mensaje de cadena)

        {

            logger.Warn (mensaje);

        }

    }

Para aprovechar la instancia de NLogManager en los controladores, debe agregar una instancia en el método ConfigureServices como se muestra en el fragmento de código que se proporciona a continuación.

services.AddSingleton ();

Cuando inicia el Visor de eventos de Windows, puede ver el mensaje de error registrado allí como se muestra en la captura de pantalla a continuación.

El registro de eventos de Windows se utiliza normalmente para registrar eventos del sistema, tráfico de red y datos relacionados, como seguridad, rendimiento, etc. Puede aprovechar el registro de eventos de Windows como destino de registro para almacenar los datos de su aplicación. Si su aplicación solo se ejecuta en Windows, el Registro de eventos de Windows es una buena opción para almacenar los datos del registro de eventos de su aplicación.

Cómo hacer más en C #:

  • Cómo usar ArrayPool y MemoryPool en C #
  • Cómo usar la clase Buffer en C #
  • Cómo usar HashSet en C #
  • Cómo usar parámetros opcionales y con nombre en C #
  • Cómo comparar el código C # usando BenchmarkDotNet
  • Cómo usar interfaces fluidas y encadenamiento de métodos en C #
  • Cómo realizar pruebas unitarias de métodos estáticos en C #
  • Cómo refactorizar objetos de Dios en C #
  • Cómo usar ValueTask en C #
  • Cómo utilizar la inmutabilidad en C
  • Cómo usar const, readonly y static en C #
  • Cómo usar anotaciones de datos en C #
  • Cómo trabajar con GUID en C # 8
  • Cuándo usar una clase abstracta frente a una interfaz en C #
  • Cómo trabajar con AutoMapper en C #
  • Cómo usar expresiones lambda en C #
  • Cómo trabajar con delegados Action, Func y Predicate en C #
  • Cómo trabajar con delegados en C #
  • Cómo implementar un registrador simple en C #
  • Cómo trabajar con atributos en C #
  • Cómo trabajar con log4net en C #
  • Cómo implementar el patrón de diseño del repositorio en C #
  • Cómo trabajar con la reflexión en C #
  • Cómo trabajar con filesystemwatcher en C #
  • Cómo realizar la inicialización diferida en C #
  • Cómo trabajar con MSMQ en C #
  • Cómo trabajar con métodos de extensión en C #
  • Cómo usar expresiones lambda en C #
  • Cuándo usar la palabra clave volátil en C #
  • Cómo usar la palabra clave yield en C #
  • Cómo implementar polimorfismo en C #
  • Cómo construir su propio programador de tareas en C #
  • Cómo trabajar con RabbitMQ en C #
  • Cómo trabajar con una tupla en C #
  • Explorando métodos virtuales y abstractos en C #
  • Cómo usar Dapper ORM en C #
  • Cómo usar el patrón de diseño flyweight en C #