Primeros pasos con log4net

Configuración de log4net

Vamos a crear una aplicación de consola simple Hello World y registrar algo en la consola usando log4net. Una vez que tengamos esto en ejecución, podemos escalarlo para usarlo en escenarios de desarrollo reales en los siguientes ejemplos. Comencemos poco a poco y construyamos desde allí.

Primero, necesitamos crear un proyecto de consola simple en Visual Studio y WriteLine("Hello World") como se muestra a continuación

ingrese la descripción de la imagen aquí

A continuación, debemos agregar la biblioteca log4net a nuestro proyecto. Por lo tanto, debemos hacer clic derecho en Referencias y seleccionar Administrar paquetes NuGet

ingrese la descripción de la imagen aquí

Luego busque log4net e instálelo

ingrese la descripción de la imagen aquí

Ahora hemos agregado con éxito log4net.dll a nuestro proyecto.

Ahora necesitamos configurar nuestro app.config (o web.config si es una aplicación web). Esta parte es un poco complicada, pero no se asuste. Lo ejecutaremos paso a paso y nos conectaremos y ejecutaremos.

En app.config, primero debemos crear una sección de configuración en configuración. Necesitamos proporcionar un nombre y un tipo como se muestra a continuación:

<configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>

Lo que hemos hecho aquí es que estamos diciendo que vamos a crear una sección en nuestro archivo de configuración llamada log4net que debe buscarse. Todo lo relacionado con el registro estará aquí. Desde la creación de nuestro archivo de registro, cómo alargar y qué información debe registrarse. Así que ahora sigamos adelante y creemos la sección log4net.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>
  <log4net>
    
  </log4net>
  <startup> 
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

Lo primero que vamos a agregar en nuestra sección log4net es un appender. Un appender es básicamente una herramienta de registro. Es en lo que queremos registrar nuestros registros. Hay muchos anexadores disponibles para iniciar sesión en archivos, bases de datos, etc. En este ejemplo, iniciaremos sesión en nuestra ventana de consola, así que vamos a crear un anexador de consola:

<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
  
  </appender>
</log4net>

A continuación, necesitamos definir un diseño:

<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
    
    </layout>
  </appender>
</log4net>

En diseño, definiremos qué queremos mostrar en la consola y cómo queremos mostrarlo. Para esto, necesitamos un patrón de conversión. Hay muchos tipos diferentes de patrones que podemos usar, para este ejemplo nos ceñiremos a un patrón bastante simple.

<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date{ABSOLUTE} [%thread] %level %logger - %message%newline"/>
    </layout>
  </appender>
</log4net>

Lo que estamos haciendo arriba es decir que necesitamos la siguiente información: la marca de tiempo absoluta, el subproceso en ejecución que arroja la excepción y el nivel de registro. Hay 7 niveles de registro proporcionados por log4net.

  • APAGADO: no se registra nada (no se puede llamar)
  • FATAL
  • ERROR
  • ADVERTIR
  • INFORMACIÓN
  • DEPURAR
  • TODO - todo se registra (no se puede llamar)

Sin embargo, de los 7 podemos usar solo 5 (DEBUG, INFO, WARN, ERROR y FATAL). Declarar el nivel de registro en DEBUG significa que registrará todo, es decir, DEBUG, INFO, WARN, ERROR y FATAL. Sin embargo, al declarar el nivel de registro en WARN, solo se registrarán WARN, ERROR y FATAL. Espero que entiendas la jerarquía.

Lo último que necesitamos en app.config es una sección raíz. La sección raíz alberga nuestros registradores de nivel superior y el nivel para iniciar sesión. Es importante comprender que todo se hereda de la raíz, por lo que ningún agregador se registrará a menos que se haga referencia a él en la raíz. Con eso agregado, así es como debería verse su app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>
  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{ABSOLUTE} [%thread] %level %logger - %message%newline"/>
      </layout>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="ConsoleAppender" />
    </root>
  </log4net>
  <startup> 
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration> 

No es una mala idea copiar y pegar secciones del archivo de configuración, sin embargo, es importante comprender de qué son responsables. Ahora que hemos terminado de configurar nuestra app.config, necesitamos agregar un poco de código a nuestro Proyecto de Consola. Primero, debemos definir una entrada única que debe colocarse fuera de su clase.

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

Póngalo justo debajo de mis instrucciones de uso en el archivo Program.cs. A continuación, debemos crear una instancia del registrador para usarlo para el registro. Esto se hace una vez por clase.

private static readonly log4net.ILog log = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

Y finalmente, necesitamos registrar algo.

log.Error("This is my error");

Su archivo Program.cs debería ser algo como esto:

using System;

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

namespace Log4netTutorial
{
    class Program
    {
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        static void Main(string[] args)
        {
            Console.WriteLine("Hello World");
            log.Error("This is my error");

            Console.ReadLine();
        }
    }
}

Continúe y ejecute el programa, debería tener su error registrado en la consola:

ingrese la descripción de la imagen aquí