NLog1 C#: Configuración versión de la aplicación con App.Config

Voy a continuar con  NLog: Sistema de logging gratuito y de código abierto para .Net.

Proyecto en GitHub NLog1.

He añadido algunas mejoras sin relación con el propio NLog,  Algo esencial para el control del proyecto es la gestión de versiones para controlar los cambios realizados (yo sigo este esquema de versionado siempre Semantic Versioning 2.0.0). El fichero App.config del proyecto en VS2012 con sintaxis XML es el candidato ideal para alojar la información de la versión del proyecto añadiendo a mano un nuevo bloque “<appSettings>” y dentro una etiqueta con clave valor :

Otra forma de definir la versión si queremos tratarla posteriormente en nuestra aplicación es definir 3 parámetros clave valor para X.Y.Z de la versión (MAJOR.MINOR.PATCH).

Poder acceder a la información de la versión desde el código de nuestra aplicación es esencial, sobre todo si queremos condicionar la ejecución de un bloque de código especial dependiendo de la versión por ejemplo. Para ello debemos añadir la referencia “System.Configuration” al proyecto y el espacio de nombres a nuestra aplicación:

using System.Configuration;

Para acceder a la variable desde nuestro programa es muy sencillo:

Como conclusión, podemos añadir la información que necesitemos, algunos usos muy comunes es incluir información de conexión a la base de datos o configuración del usuario.

Referencias externas:

 

 

 

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 ,