jueves, 24 de mayo de 2007

Logging Application Block EntLib 3

En esta ocasión y para que se entienda un poco lo que hay en el video del post anterior vamos a hacer un paso a paso de cómo utilizar el logging application block del Enterprise Library 3.0. Cada uno saque sus conclusiones pero les anticipo que LAB (logging application block) es, a mi entender, mucho más potente que Log4Net. Bueno, comencemos, vamos con un par de conceptos. -Trace Listener: Son los encargados de escribir los datos en un destino en particular, por ejemplo tenemos FlatFile (escribe en un archivo de texto plano), Formatted Event Log (escribe en el log de eventos de windows) y muchos otros, además de los que podemos crear nosotros mismos. -Formatters: Son los encargados de dar formato al mensaje, utilizan un Template (patrón) para formatear el mensaje, para incluir por ejemplo el nombre, la hora, etc. Los Trace Listeners utilizan Formatters para escribir la información. También podemos escribir nuestros Formatters. -Sources: Son los orígenes, permiten configurar las categorías de mensajes y definir que Trace Listener se utilizará para logar los mensajes que encajen con su categoría. Por ejemplo, podemos definir un Source con categoría "Negocios" para loger cualquier evento que sea información y que tenga como destino un Trace Listener en particular. -Filters: Los filtros son justamente eso, filtros, nos permiten discriminar eventos por prioridad, por categoría o directamente no logear nada, también podemos definir nuestro filtros. En definitiva la cosa queda así Filter -> Source -> TraceListener (formateando con un Formatter) Comencemos con un ejemplo simple Con EntLib 3 instalada hacemos click derecho sobre nuestro App.Config y vemos la siguiente opción Haciendo click en "Edit Enterprise Library Configuration" nos aparece la siguiente ventana Gracias a el excelente trabajo que han echo los muchachos de Microsoft Practices no será necesario lidiar con ningún archivo de configuración, podemos configurar cualquier elemento de la EntLib. Para agregar LAB a la configuración hacemos botón derecho sobre el nodo que dice el path del archivo y seleccionamos New -> Logging Application Block Acto seguido nos queda así Vemos que EntLib creó por nosotros una configuración por defecto, vamos a ver que significa cada cosa. Debajo del nodo "Logging Application Block" vemos la carpeta Filters vacía, es decir, no hay filtros definidos, cuando esto es así se logea todo sin filtrar nada. A continuación se encuentra la carpeta "Category Source" que son los source que nosotros creamos, hay uno creado por defecto que se llama "General" y tiene debajo un nodo que dice "Formatted Evento Log Trace Listener" este es el listener que utilizará esta categoría para logear y lo podemos ver definido dentro de la carpeta "Trace Listeners". Al final hay una carpeta "Formatters" que contiene un único elemento que es un formater de texto. Hay una carpeta más llamada "Special Sources" que es igual a la de Category Source pero con unos eventos predefinidos, la idea es que atrapa los eventos independientemente de la categoría, un poco más sencillo pero también menos potente, vemos además que tiene el nodo "Logging Errors & Warnings" con una referencia al mismo Trace Listener que la categoría General. Nos paramos con el puntero sobre la caegoría general y persionamos F4, nos aparece la siguiente ventana El name es el nombre con el que vamos a referirnos a la categoría y el source level indica que tipo de eventos va a tener en cuentra esta categoría más allá de que un evento se indicado con esta categoría deberá ser del source level indicado y superior (es decir el source level es information se tiene en cuentra information, error, etc) para ser logeado, por defecto se encuentra en "All" con lo cual cualquier evento que tenga indicada la categoría General será logeado independientemente del source level. Vamos hasta el nodo "Trace Listeners" y seleccionamos el "Formatted Event Log Trace Listener" y presionamos F4, nos aparece la siguiente ventana Lo que tenemos que hacer es borrar la palabra "Application" de "Log" porque si nuestro Windows está en castellano no va a funcionar, sino ponemos nada por defecto grabará el el event log de aplicación. Y Listo, ya está configurado para escribir en el log de windows en la entrada de aplicación de aplicación. Vamos al código. Habiendo agregado la referencia a logging application block en el proyecto colocamos el using Microsoft.Practices.EnterpriseLibrary.Logging al principio del código escribimos: Logger.Write(new LogEntry("hola mundo", "General",2, 2, TraceEventType.Error, "Prueba", null)); Listo. Corremos la aplicación y vamos rápidamente el log de windows y albricias La seguimos en la próxima tengo que trabajar un poco.

jueves, 17 de mayo de 2007

Video explicativo de LoggingApplicatoinBlock

Cansado de escribir y dándome cuenta de lo poco claro que soy para explicar algo con palabras solamente me decidí a hacer un video con las cosas que quiero compartir, en este caso un tutorial bien básico de como utilizar el loggin application block del enterprise library 3 con c#, no tiene sonido, bueno es el primero, a ver si con el tiempo voy mejorando, saludos.

jueves, 10 de mayo de 2007

Log4Net de a poco

Esta es la primer entrada en el blog acerca de programación en .net y vamos a comenzar con una herramienta muy útil, Log4Net. Muchos podrán decir ¿por qué no usar el LogginAppBlock de EntLib?, bueno, no sé, en la empresa que estoy trabajando adquirieron un framework de excepciones que usa Log4Net y a partir de allí surgió esto, lo cual nos lleva a la siguiente pregunta ¿por qué no usar el ExceptionHandlingAppBlock de EntLib?, bueno, esta pregunta aun no tiene respuesta, tal vez la más acertada sea "cosas de management" pero basta de vueltas, manos a la obra. Primero que nada vamos a necesitar Log4Net para poder usarlo (cuac), lo podemos descargar desde aquí. Con el Log4Net en nuestas manos no tenemos más que crear un proyecto de prueba en Visual Studio, con una aplicación de consola bastará y agregar la referencia a Log4Net. Y ahora lo primero, un pequeño resumen de como es que funciona. Como ya sabemos es un framework para "logear" (lease escribir registros de actividades) cosas que nos interese en nuestra aplicación, por ejemplo, información general, alertas, errores, etc. La clase principal de Log4Net con la cual vamos a interactuar es LogManager más especificamente vamos a declarar en nuestra clase un campo privado estático que implemente la interfaz ILog, es decir la siguiente línea
private static readonly ILog _logger = LogManager.GetLogger(typeof(Program));
Vamos a ver qué dice aquí, primero, _logger es una variable privada estática que implementa la interfaz ILog, segundo la recuperamos con el método estático GetLogger de la clase LogManager y tercero le ponermos como nombre typeof(Program) que viene a ser el nombre completo de la clase donde la declaré yo (Program), ¿por qué?, porque si, puede tener cualquier nombre, pero de este modo nos aseguramos que sea único. Con nuestro _logger ya podemos comenzar, debemos saber un par de cosas antes, nuestro objeto _logger va a escribir los que le digamos a través de Appenders que no son más que clases que implementan la interfaz IAppender y hacen diferentes cosas, escriben en el log de windows, en la consola, en una base de datos, en un archivo de texto, etc. depende del Appender. La parte triste de esto es el archivo de configuración, debemos indicarle a Log4Net como queremos que haga el trabajo. Para nuestro primer ejemplo, sin embargo, no vamos a necesitar escribir ni una línea en el archivo de configuración ya que hay un método en la clase log4net.Config.BasicConfigurator que nos dá una configuración por defecto, entonces en el lugar donde se inicie nuestra aplicación (en el constructor por ejemplo) agregamos la siguiente línea: log4net.Config.BasicConfigurator.Configure() Listo, ya podemos probar Log4Net. Disponemos de varios métodos para decirle que escriba cosas según ocurren las cosas, por ejemplo hay un método Debug con el cual le decimos que escriba información de debug otro que se llama Error, etc. Entonces vamos a ver el código completo de nuestra primer aplicación con Log4net
   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Text;
   4:  using log4net;
   5:   
   6:  namespace IntoLog4net
   7:  {
   8:      class Program
   9:      {
  10:          /// el logger debe ser una variable estática, es bueno ponerle como nombre el tipo de la clase donde se instancia 
  11:          /// para asegurarse que es único  
  12:          private static readonly ILog _logger = LogManager.GetLogger(typeof(Program));
  13:   
  14:          static void Main(string[] args)
  15:          {
  16:              Program p = new Program();
  17:              p.TestConfiguracionBasica(); 
  18:              Console.ReadLine();
  19:          }
  20:          /// Ejemplo simple de utilización de log4net para verificar que funciona
  21:          /// 
  22:          private void TestConfiguracionBasica()
  23:          {
  24:              //Este línea establece una configuración por defecto para log4net hacia la consola 
  25:   
  26:              log4net.Config.BasicConfigurator.Configure();
  27:              //eso es todo, logeamos algo... 
  28:              _logger.Info("Hola Log4Net");
  29:          }
  30:      } 
  31:   
  32:  }
¿Fácil no?, si lo ejecutamos vemos que en la pantalla aparece algo así: Bueno, ahora podemos probar con otros métodos, la idea de los métodos para cada tipo de mensaje es que podemos asociar cada tipo de mensaje con un Appender diferente, entonces podemos escribir en un archivo de texto las información, en una base de datos los errores, etc. En la siguiente entrada vamos a aprender a escribir en un archivo de texto.