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.

11 comentarios:

juan_neufeld dijo...

Lo bueno, si breve, dos veces bueno. Me resultó muy útil y práctico.

LgEaObNrAiReDlO dijo...

Gracias por el comentario.

Unknown dijo...

Nunca utilicé log4j porque cuando traté de usarlo me pareció muy complicado. Despues de leer este artículo entendí que lo complicado no era log4j sino la explicación.

Muchas gracias por la efectividad de la simplicidad del artículo.

Xavi dijo...

Hola,
Tengo un problema con el log4net y el visual 2005, resulta que funciona perfectamente en modo "debug" pero al compilar la aplicación en modo "release", la aplicación sigue funcionando bien pero no el log4net.

Alguna idea?
xavi.delvalle@gmail.com

Muchas gracias.

LgEaObNrAiReDlO dijo...

La verdad es que me sorprende cuanto entra la gente a este post, y eso me recuerda que hacer un año ya del blog, pero bueno, volviendo a tu pregunta, la verdad es que no tengo idea, pasame el código o un ejemplo que reproduzca el error a mi correo y con gusto te ayudará, saludos.

Unknown dijo...

Hola Leonardo:

Pues me parece muy bueno y útil lo del blog, felicitaciones.
Necesito ayuda para el manejo del log4net en archivos de texto.

Tendrás algún tutorial???, ya que la información que está en la página de apache es muy engorrosa y hasta uno puede verse perdido entre tanto palabreo

Saludos
Piero.

Agustinator dijo...

Xavi, podría ser que tengas un archivo de configuración de log4net en la carpeta Debug y que en Release te falte ese archivo?

Unknown dijo...

Me gustaría saber cómo se configura log4net en C# para poder escribir los logs en un fichero de texto.

Por cierto, muy bueno este post, rápido, sencillo y para toda la familia :-)

Huakus dijo...

Mató el "2B|!2B" jeje (ojala se me hubiera ocurrido a mi)

Gracias por la info... pero hoy necesitaba saber como configurar el archivo log jeje

Graxx =)

Christian Di Costanzo dijo...

Chaval no hace falta que hagas un Objeto de la clase Program para llamar al metodo sino que solo debes hacer que el metodo sea static. Saludos.

Unknown dijo...

Como se configuraría el app.config o web.config? Saludos