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:
Lo bueno, si breve, dos veces bueno. Me resultó muy útil y práctico.
Gracias por el comentario.
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.
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.
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.
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.
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?
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 :-)
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 =)
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.
Como se configuraría el app.config o web.config? Saludos
Publicar un comentario