En numerosas ocasiones es necesario tener trazas de nuestra aplicación o registrar diferentes eventos que se producen en ella como pueden ser errores, control de acceso y autenticación, …
Log4Net es una librería licenciada bajo la Apache Software Licence, que nos permite incluir en nuestra aplicación la funcionalidad de “logging” de una forma rápida y sencilla. Con sólo cambiar el tipo de “appender” en el fichero de configuración. Podemos descargar la librería directamente desde su página o bien instalarla directamente en nuestra aplicación mediante nuget.
Vamos a ver un ejemplo sencillo utilizando Windows Presentation Foundation (WPF).
Lo primero es crear el proyecto de tipo aplicación de WPF.
Seguidamente abrimos el gestor de paquetes de Nuget y buscamos Log4Net. Lo añadimos a la solución.
Y ya podemos referenciar el ensamblado de log4Net. Para nuestro ejemplo vamos a inicializar el LogManager de log4Net en el constructor de la vista. Este LogManager es el encargado de obtener instancias del logger.
public ILog Logger { get; set; }
public MainWindow()
{
InitializeComponent();
this.Logger = LogManager.GetLogger(Assembly.GetExecutingAssembly().GetTypes().First());
log4net.Config.XmlConfigurator.Configure();
this.Logger.Info("Inicio de la app");
}
Creamos una propiedad Logger que inicializamos para obtener una instancia que implementa la interfaz ILog en el ensamblado actual. Seguidamente y ¡muy importante! configuramos log4Net mediante XmlConfigurator, lo que hace que busque en el fichero de configuración de la aplicación (App.config), los datos que necesita.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<log4net>
<root>
<level value="ALL"/>
<appender-ref ref="FileAppender" />
</root>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="log-file.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
Lo primero que observamos es la sección de configuración para poder utilizar log4net:
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
Luego le decimos el nivel de severidad que vamos a registrar:
- Debug: usado con fines de “debugging” de código.
- Info: trazas informativas normalmente de eventos o comportamiento.
- Warn: para notificar de “warnings” en la aplicación.
- Error: errores no fatales para registrar excepciones.
- Fatal: nivel más severo para registrar errores fatales que llevan a una terminación de la aplicación.
- ALL: captura todo tipo de severidades.
<root>
<level value="ALL"/>
<appender-ref ref="FileAppender" />
</root>
También se especifica qué “appender” (tipo de registro de log) va a registrar ese nivel de severidad. En este ejemplo usamos el “FileAppender” que registrará en un archivo las trazas de la aplicación.
Log4Net tiene diferentes tipos de “appenders” como se puede ver en este enlace. Almacenamiento en base de datos (SQL Server, Oracle, SQLite, …), Asp.Net Appender, Buffer de almacenamiento antes de su volcado, consola, consola con distinción de colores, EventLog del sistema, NetSend, RolingFile, Smtp, son algunos de la gran variedad disponible de tipos de “Appenders”. En nuestro ejemplo:
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="Logs\log-file.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
Va a escribir nuestro “log” en el fichero log-file.txt ubicado dentro del directorio Logs de nuestra aplicación (si no existe lo crea), utilizando para cada traza el formato especificado en el patrón del tag conversionPattern.
De tal forma que obtendremos un fichero con el siguiente contenido:
2014-05-12 17:55:33,508 [10] INFO SampleLoggingLog4Net.App [(null)] - Inicio de la app
¡Espero que os sea de utilidad y que dejéis huella de todo!