Blog dedicado a la programación .NET y la informática en general

Se plantea la posibilidad de guardar los sucesos de una aplicación en un fichero de texto.

Para ello se va a hacer uso de las librerías de Enterprise Library en su versión 6 mediante su módulo “Logging Application Block” y el ejemplo se ha realizado sobre Visual Studio 2012 en un proyecto WPF.

El primer paso es instalar las librerías mediante “NuGet” haciendo click con el botón derecho sobre el proyecto y seleccionando “Administrar paquetes NuGet”

Buscar por “EnterpriseLibrary” e instalar “Enterprise Library – Logging Application Block”.

Se instalará las librerías correspondientes a:

EnterpriseLibrary.Common

EnterpriseLibrary.Logging

De forma alternativa se puede instalar el paquete mediante la línea de comandos de NuGet ejecutando el siguiente comando:

PM> Install-Package EnterpriseLibrary.Logging

Ahora hay que configurar el fichero .config para que nos permita guardar los sucesos en un fichero de texto. Para esto tenemos tres posibilidades de edición. La primera y la segundas son las más laboriosas, la primera es editando directamente el fichero .config y la segunda realizarlo en tiempo de ejecución por código fuente, ambas según las directivas indicadas en la documentación:

http://msdn.microsoft.com/en-us/library/dn169621.aspx

La tercera forma, es la que os recomiendo si os acostumbráis a usar “Enterprise Library”, es descargando el software de gestión de ficheros de configuración que os encontraréis en la página web.

Nota: para la versión 5 es más fácil aún, ya que se puede instalar por NuGet el paquete “EnterpriseLibrary.Config” para VisualStudio y permite la edición del fichero .config desde el mismo proyecto haciendo click con el botón derecho del ratón sobre el proyecto que tenga instalada las librerías de Enterprise Library.

http://www.microsoft.com/en-us/download/details.aspx?id=38789

Basta con descargarse el fichero “EnterpriseLibrary6-binaries.exe”.

Dentro de este se encuentra el fichero con el nombre “Microsoft Enterprise Library 6.zip” que comprime los ensamblados que necesitaremos.

Ejecutar la aplicación “EntLibConfig.exe” (dando por supuesto que usáis un sistema operativo de 64 bits).

Abrimos el fichero de configuración del proyecto:

FileàOpen y buscar el fichero .config del proyecto en el que se ha instalado las librerías.

Añadir el bloque de configuración para el registrar los sucesos.

Por defecto introduce los registros en el visor de sucesos del sistema operativo. Se añade el soporte para el registro sobre un fichero de texto.

Hay dos opciones, registrarlo sobre un único fichero de texto plano o sobre varios. El segundo nos permite controlar cambiar el fichero de texto según la fecha o el tamaño que ocupe. En este ejemplo se trabajará sobre un único fichero de texto plano por ser más sencillo.

Ahora se debe asociar una configuración que de formato a los sucesos en el fichero. Para ello se reutilizará el que está definido para el visor de sucesos.

La configuración se finaliza cambiando el “listener” por defecto de las categorías “General” y “Logging Errors & Warnings”.

Se salvan los cambios y volvemos a Visual Studio para comprobar los cambios en el fichero de configuración.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
    </configSections>
    <loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
        <listeners>
            <add name="Event Log Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                source="Enterprise Library Logging" formatter="Text Formatter"
                log="" machineName="." traceOutputOptions="None" />
            <add name="Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                fileName="trace.log" formatter="Text Formatter" />
        </listeners>
        <formatters>
            <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                template="Timestamp: {timestamp}{newline}
Message: {message}{newline}
Category: {category}{newline}
Priority: {priority}{newline}
EventId: {eventid}{newline}
Severity: {severity}{newline}
Title:{title}{newline}
Machine: {localMachine}{newline}
App Domain: {localAppDomain}{newline}
ProcessId: {localProcessId}{newline}
Process Name: {localProcessName}{newline}
Thread Name: {threadName}{newline}
Win32 ThreadId:{win32ThreadId}{newline}
Extended Properties: {dictionary({key} - {value}{newline})}"
                name="Text Formatter" />
        </formatters>
        <categorySources>
            <add switchValue="All" name="General">
                <listeners>
                    <add name="Flat File Trace Listener" />
                </listeners>
            </add>
        </categorySources>
        <specialSources>
            <allEvents switchValue="All" name="All Events" />
            <notProcessed switchValue="All" name="Unprocessed Category" />
            <errors switchValue="All" name="Logging Errors &amp; Warnings">
                <listeners>
                    <add name="Flat File Trace Listener" />
                </listeners>
            </errors>
        </specialSources>
    </loggingConfiguration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

Para usarlo en el código usaremos la clase estática “Logger”, pero previamente hay que asignarle el “TraceListener” por defecto. Por tanto es conveniente añadir un método que lo esteblezca en el inico del aplicativo, por ejemplo el constructor del archivo App.xaml para WPF o en Global.asax para ASP.NET o Program.cs en WindowsForms.

/// <summary>
/// Inicializa LAB en la aplicación para que se puedan registrar sucesos
/// </summary>
private void InicarLibreriaLog()
{
 IConfigurationSource configurationSource = ConfigurationSourceFactory.Create();
 LogWriterFactory logWriterFactory = new LogWriterFactory(configurationSource);
 Logger.SetLogWriter(logWriterFactory.Create());
}

Una vez que se tiene asignado el “Listener” se puede proceder a registrar los sucesos como se muestra acontinuación.

private void btnRegistrar_Click(object sender, RoutedEventArgs e)
{
 string suceso = this.txtSuceso.Text;
 Logger.Write(suceso);
 MessageBox.Show(&amp;quot;Suceso guardado&amp;quot;);
}

El suceso será almacenado en un fichero de texto que para la configuración que hemos establecido se llamará “trace.log” y estará ubicado en la carpeta “bin” del proyecto.

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

A %d blogueros les gusta esto: