Amigos de la trinchera, los logs en una aplicación son muy importantes ya que con estos podemos rastrear problemas o ver la funcionalidad de nuestra aplicación, entre otras cosas. Por esta razon me di a la tarea de buscar la mejor librería para C# de registro de logs, rápidamente con una simple búsqueda Google, pude determinar que la mejor o bien la que se menciona mas en la red es Log4net, por lo tanto, decidí utilizarla para probarla por mi mismo.
Por lo tanto hoy les quiero compartir como instale la librería en Visual Studio 2019, primeramente abrí el instalador de paquetes NuGet, este pude ser accedido a través de herramientas > NuGet Administrador de paquetes > Administrar paquetes NuGet para solución.
Una vez desplegado el buscador de paquetes, buscamos “log4net” y seleccionamos el siguiente paquete:
Una vez tengamos instalado esta libreria podemos continuar a configurarla.
Primero se requiere agregar el siguiente código al “AssemblyInfo.cs“
[assembly: log4net.Config.XmlConfigurator]
Este debe ser agregado al final de nuestra clase.
Si no existe el “AssemblyInfo.cs” en el proyecto lo podremos generar, haciendo clic derecho en el proyecto > añadir > nuevo objeto o bien Ctrl+Shift+A.
El segundo paso a seguir, es modificar el “App.config“, dentro de los tags de configuración debemos de insertar la sección de log4net
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
Esto quedaría de la siguiente manera.
lo siguiente sera insertar el bloque de log4net, en esta parte se configura la funcionalidad del logger.
Se deberá pegar el siguiente bloque de código por debajo de la sección anterior.
<log4net>
<appender name="TestAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\Logs\logs.log" />
<encoding value="utf-8" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd-HHmm" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date > [%logger]{%method} > %level:: %message%n" />
</layout>
</appender>
<root>
<level value="All" />
<appender-ref ref="TestAppender" />
</root>
</log4net>
Se mostrara de la siguiente manera:
Comencemos a desmenuzar este bloque de código y explicarlo paso por paso:
En este tag podemos definir el nombre de nuestro appender, seguido del tipo, existen multiples tipos, el que estamos utilizando actualmente es un appender para archivos de texto o logs con la diferencia de que cada dia creara un file con una fecha diferente.
<appender name="TestAppender" type="log4net.Appender.RollingFileAppender">
Algunos de los tipos de appenders que quiza te sean de utilidad:
Appender para conección a base de datos.
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
<bufferSize value="100"/>
Este appender espera a tener 100 mensajes de logs, para enviarlo posteriormente a una consola, podemos en este caso cambiar el ref, a un appender que cree ficheros como el nuestro para hacer uso de esta funcionalidad.
<appender-ref ref="ConsoleAppender" />
Este appender es similar al que tenemos actualmente, sin la funcionalidad de hacer roll, a cierta fecha o peso de archivo.
<appender name="FileAppender" type="log4net.Appender.FileAppender">
El siguiente tag es donde ponemos una ruta a guardar nuestros fichero de logs.
Aquí podremos definir la ruta que nosotros queramos, también podemos omitir esta parte y definiría dentro de nuestro proyecto, con la siguiente linea de código:
<file value="C:\Logs\logs.log" />
log4net.GlobalContext.Properties["LogFileName"] = @"C:\\Logs\\logs.log";
Con estos tags podemos definir si añadimos los mensajes al final de nuestros logs y la fecha que se le agrega al titulo de nuestros ficheros logs.
Si quisiéramos solamente guardar el ultimo valor de nuestros logs a los ficheros, cambiaremos la configuración de appendToFile a False, Las siguientes dos lineas, indicamos que a nuestro fichero logs.log le agregaremos la fecha diaria, junto con hora y minuto, especificada en el patrón de la linea 3.
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd-HHmm" />
Esta parte de nuestro código definimos el patrón de como se mostrara el mensaje en nuestro log.
%date o %d, nos logean la fecha completa, %logger nos logea el path donde se esta ejecutando el logger, %method es el metodo donde se ejecuta el logeo, %level es el nivel de alerta de nuestro logger, este varia desde INFO, ERROR, FATAL, etc. a continuacion el link para mas información sobre el patron de conversion https://logging.apache.org/log4net/log4net-1.2.13/release/sdk/log4net.Layout.PatternLayout.html
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date > [%logger]{%method} > %level:: %message%n" />
</layout>
Para finalizar, en el tag root podemos especificar el nivel de logs que sera registrado en los archivos logs.
en el nivel podemos especificar si queremos hacer registro de un selecto tipo de mensajes, por ejemplo, error, info, debug, warn, fatal, etc.
<level value="All" />
<appender-ref ref="TestAppender" />
Ahora que hemos configurado nuestro logger, podemos hacer uso de este de la siguiente manera, dentro de nuestro codigo:
Importamos la libreria log4net.
using log4net;
Referenciamos el logger, en cada clase que lo vayamos a utilizar de la siguiente manera:
private static readonly log4net.ILog log
= log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Si se cuenta con una versión de Net.framework mayor o igual a 4.6 podemos crear una clase logs y hacer referencia de la siguiente manera, esta manera nos brinda mayor velocidad y rendimiento en aplicaciones que requiera un volumen grande de logs.
private static readonly ILog Log = Logs.GetLogger();
nuestra clase logs debera contener el siguiente codigo:
class Logs
{
public static ILog GetLogger([CallerFilePath] string filename = "")
{
return LogManager.GetLogger(filename);
}
}
Listo, de esta forma ya podemos llamar a nuestro a nuestro logger, llamando nuestro objeto Log, seguido de el nivel de logeo que se requiere.
Espero y esta guía sea de su agrado, saludos!!
Originario de la N, Sonora, tierra de las carnitas asadas.
Programador PLC Siemens, Python – Aprendiendo a programar PHP, noob en linux
Excelente se te agradece un monton. Gracias
A ti por leernos en esta tu trinchera desde Guanajuato un saludo 🙂
Excelente
Muchas gracias Luis . Saludos de villagran gto