NLog: Sistema de logging gratuito y de código abierto para .Net

Siempre que comienzo proyectos de envergadura antes me pongo al día de las utilidades básicas que necesita mi aplicación, un sistema de logging para mi es esencial para seguir la ejecución del código, en lenguaje C otras veces he usado liblogger, es bastante básico pero cumple con mis propósitos, se integra fácilmente con el código principal y es capaz de escribir los logs en ficheros de texto plano en disco.

Para C# uso NLog, es muy flexible en su configuración, puede enviar los logs al clásico fichero, con innumerables opciones de configuración para dar nombre al fichero destino, rotar ficheros cuando alcanzan determinado tamaño y todo lo que nos ocurra. Pero a parte de trabajar con ficheros como toda la vida también puede enviar los logs a una base de datos, al sistema de eventos de windows o usando la red local a un servidor en otra máquina por ejemplo (ver apartado “Targets” en GitHub).

La instalación de NLog es muy sencilla usando el gestor de paquetes de Visual Studio, escribimos las siguientes líneas (previamente creamos un proyecto de consola):

PM> Install-Package NLog -Version 4.4.11

PM> Install-Package NLog.Config

NLog.Config es para poder configurar NLog para nuestra aplicación en un fichero XML, cuando lo instalamos añade automáticamente un fichero NLog.config al proyecto, borramos su contenido y copiamos las siguientes líneas:


<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true" > <!-- permite cambiar configuración sin parar ejecución! -->

<!-- crea subcarpeta por día por ejemplo logs/2017-07-23/ -->
<variable name="logDirectory" value="${basedir}/logs/${shortdate}"/>
<!-- Fichero con fecha Ejemplo logs/2010-06-08.log -->
<!-- <variable name="logDirectory" value="${basedir}/${shortdate}.log"/> -->

<targets>
<target xsi:type="NLogViewer"
name="viewer"
includeSourceInfo="true"
address="udp://127.0.0.1:9999"/>
<target xsi:type="ColoredConsole" name="colored_console"/>

<target
layout="${longdate} ${logger} ${message}"
name="file1" xsi:type="File" fileName="${logDirectory}/log.log"/>

</targets>

<rules>
<logger name="*"
minlevel="Trace"
writeTo="viewer,colored_console,file1" />
</rules>
</nlog>

No voy a entrar a describir en detalle todos los campos (para eso está la documentación oficial), lo que hacemos es definir 3 destinos para los logs.

El primero NLogViewer envía los logs a un visor externo en una dirección IP y un puerto determinado, yo lo he usado para enviar los logs a una aplicación gráfica llamada Sentinel. Las primeras pruebas que he realizado funciona de maravilla.

El siguiente destino es la consola coloreada el nivel de logs:

El tercero es el clásico fichero, he usado algunas propiedades para que se guarde en una carpeta con la fecha actual.

Por último la sección “rules” permite filtrar los logs de salida por tipo y que destinos se usan, en un momento dado tal vez queramos desactivar la salida por consola por ejemplo.

El parámetro “autoReload” a True permite que cambiemos el fichero de configuración sin necesidad de detener la aplicación.

Para realizar unas pruebas muy sencillas editamos Program.cs y lo dejamos así:

Un ejemplo del fichero NLog.config que me he topado por Internet incluso pemite enviar los logs a GMail. Me parece extremadamente útil para enviar errores fatales a los administradores de la aplicación que normalmente no estarán todo el día leyendo los logs esperando a que pase algo.

 

Por último debemos tomar en cuenta si queremos que el procesamiento sea asíncrono (para evitar bloqueos de nuestra aplicación  principal ,

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s