¿Como has llegado a este portal?
Trabajo
Curiosidad
Amigos/as
Recomendación
No recuerdo
Compartir con alguien

Blog ASP.NET


Log4net
1. Concepto
Log4net es una librería de código diseñada para aplicaciones .NET que permite realizar el logeo de una aplicación hacia diferentes destinos (fichero de texto, base de datos, servidor de correo, registro del sistema, consola de la aplicación)
Log4net se configura usando parametros de configuración XML. Esta configuración puede insertarse dentro del archivo de configuración de la aplicación (app.config o web.config) o en un archivo externo


2. Codificación
En este ejemplo voy a crear un log hacia un fichero de texto en una aplicación de consola.

Los pasos a seguir para crearlo son:
1 - Referenciar la librería de código log4net.dll en nuestro proyecto.
2 - Setear el archivo de configuración.
3 - Inicializar la clase.

2.a. Setear el configuración
Hay que realizar los siguientes pasos en el archivo de configuración app.config.

- Agrego en configSections la definición de log4net
Plegar

  <configSections>

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

  </configSections>



- Defino los parámetros de la sección log4net
Plegar

  <log4net>

 

    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">

      <param name="File" value="C:\MiProyecto\log4net\LogTest.txt" />

      <param name="AppendToFile" value="true" />

 

      <layout type="log4net.Layout.PatternLayout">

        <param name="conversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c - %m%n"  />

      </layout>

    </appender>

 

    <root>

      <level value="ALL" />

      <appender-ref ref="LogFileAppender" />

    </root>

 

  </log4net>



Para esta aplicación el archivo de configuración queda de la siguiente forma:
Plegar

    1 <?xml version="1.0" encoding="utf-8" ?>

    2 <configuration>

    3 

    4   <configSections>

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

    6   </configSections>

    7 

    8   <log4net>

    9 

   10     <appender name="LogFileAppender" type="log4net.Appender.FileAppender">

   11       <param name="File" value="C:\MiProyecto\log4net\LogTest.txt" />

   12       <param name="AppendToFile" value="true" />

   13 

   14       <layout type="log4net.Layout.PatternLayout">

   15         <param name="conversionPattern"

   16               value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c - %m%n"  />

   17       </layout>

   18     </appender>

   19 

   20     <root>

   21       <level value="ALL" />

   22       <appender-ref ref="LogFileAppender" />

   23     </root>

   24 

   25   </log4net>

   26 

   27 </configuration>



2.3. Inicializar la clase
Creo la clase LogTest y creo la variable logger.
Plegar

 private static readonly ILog logger = LogManager.GetLogger(typeof(LogTest));



Carga la configuración del loger indicando que se utiliza el archivo de configuración de la aplicación (app.config).
Plegar

 XmlConfigurator.Configure();



Codifico las acciones de logeo.
Plegar

 logger.Debug("Texto de nivel Debug");

 logger.Info("Texto de nivel Info");

 logger.Warn("Texto de nivel Warn");

 logger.Error("Texto de nivel Error");

 logger.Fatal("Texto de nivel Fatal");



El código resultante queda de la siguiente forma:
Plegar

    1 using log4net;

    2 using log4net.Config;

    3 

    4 namespace log4net

    5 {

    6     class LogTest

    7     {

    8 

    9         private static readonly ILog logger = LogManager.GetLogger(typeof(LogTest));

   10 

   11         static void Main(string[] args)

   12         {

   13             Configuracion();

   14             RegistrarLog();

   15         }

   16 

   17         /// <summary>

   18         /// Configurar Logs

   19         /// </summary>

   20         private static void Configuracion()

   21         {

   22             //Con eso se le indica al log4net que utilice la configuración desde el archivo de configuracion (app.config o web.config)

   23             XmlConfigurator.Configure();

   24         }

   25 

   26         /// <summary>

   27         /// Registrar Logs

   28         /// </summary>

   29         private static void RegistrarLog()

   30         {

   31             logger.Debug("Texto de nivel Debug");

   32             logger.Info("Texto de nivel Info");

   33             logger.Warn("Texto de nivel Warn");

   34             logger.Error("Texto de nivel Error");

   35             logger.Fatal("Texto de nivel Fatal");

   36         }              

   37     }

   38 }



3. Conceder permiso de escritura
Las aplicaciones de .NET son ejecutadas por el usuario ASPNET, que por defecto no tiene privilegios de escritura en el servidor. Por tanto si estamos escribiendo hacia un fichero de texto hay que darle al usuario ASPNET los permisos necesarios para escribir en la carpeta donde queramos guardar los logs y que hemos definido en el parámetro File.


4. Resultado
El archivo de texto creado en la carpeta
Plegar
2008-03-02 21:13:42 [10] DEBUG log4net.LogTest - Texto de nivel Debug
2008-03-02 21:13:42 [10] INFO log4net.LogTest - Texto de nivel Info
2008-03-02 21:13:42 [10] WARN log4net.LogTest - Texto de nivel Warn
2008-03-02 21:13:42 [10] ERROR log4net.LogTest - Texto de nivel Error
2008-03-02 21:13:42 [10] FATAL log4net.LogTest - Texto de nivel Fatal


5. Recomendaciones
Si bien se puede realizar un logeo hacia varios destinos recomiendo utilizar siempre ficheros de texto. La base de datos puede fallar, el servidor de correo puede estar dañado, el registro colapsado, etc.
El logeo hacia fichero de textos sólo requiere tener permiso de escritura en la carpeta seleccionada y es facilmente importable a base de datos o a XML.

6. Niveles de logeo
Uno de los parametros más importante de configuración es el nivel de logeo.
Existen 5 niveles:

DEBUG Prioridad 5
INFO Prioridad 4
WARN Prioridad 3
ERROR Prioridad 2
FATAL Prioridad 1

Log4net sólo imprime los logs de nivel superior o igual al asignado. Por ejemplo si fijo el nivel de log en WARN quedarán registrados también los de nivel superior ERROR y FATAL.
También puedo utilizar los valores ALL para todos los niveles y OFF para no realizar ningún registro.
De esta manera en modo desarrollo puedo realizar logeos a nivel de DEBUG y en modo producción "subir" el nivel a ERROR o FATAL. Este modelo se utiliza para realizar una traza de la aplicación modo desarrollo y en modo producción solo registrar errores no controlados de la aplicación.

7. Para investigar
En una aplicación pueden convivir varios loggers que se definen también en el archivo de configuración utilizando etiqueta logger.
Se puede restringir la capacidad de almacenamiento del fichero de texto con el parametro maximumFileSize.

8. Links
Sitio oficial para descarga log4net