martes, 31 de enero de 2012

Como trazar nuestras aplicaciones con log4net

En muchas ocasiones (por no decir en todas) es necesario guardar una traza de lo que hace nuestra aplicación. Esto se convierte en imprescindible cuando se produce una excepción no controlada ya que debemos ver que ha pasado, para en caso que sea necesario controlar esa excepción. Por ejemplo, suele ser muy útil cambiar el mensaje que ve el usuario final cuando se produce una excepción. Siempre será mejor ver "Se ha producido un error inesperado y este ha sido registrado. En caso que el problema persista contacte con administrador" que "Object reference not set to an instance of an object".

La mayoría de las veces el registro de errores suele llevarse a cabo guardando en un fichero de texto el mensaje de la excepción junto con las traza y la hora a la que se ha producido. También podemos incluir más información sobre el sistema operativo del equipo, versión del programa... En otros casos se opta por mandar un correo electrónico con la información del excepción o incluso podemos optar por hacer combinaciones de ambas, guardar la información en un fichero de texto y mandarlo por correo electrónico.

Escribir el código que realice las tareas anteriormente comentadas no es muy complicado pero implica gastar un número de horas y de recursos que en la mayoría de los proyectos no es posible. Por eso, a veces tenemos que buscar soluciones rápidas de implantar y si están ampliamente probadas mejor que mejor. En el peor de los caso solo tendremos que invertir un par de horas en leer la documentación para saber como utilizarla y a partir de ahí tan sólo haremos un copy & paste en todos nuestros proyectos.

Para empezar diré que la librería log4net es una herramienta que ayuda a registrar salidas en una amplia variedad de destinos. Esta librería es una migración de la librería log4j (log for java) y que también podemos encontrar para otros lenguajes como c++ o php.

Lo primero que debemos hacer para usar esta librería (después de leernos aunque sea por encima la documentación) es descargarla de la página oficial o través de nuget. Una vez descargada y añadida la referencia a nuestro proyecto debemos modificar nuestro fichero de configuración (app.config o web.config) añadiendo en la <configuration><configSections> lo siguiente



Luego, crearemos la sección log4net donde añadiremos el tipo de logger que vamos a usar, y que tipo de salida (appender) usaremos.  En mi caso usaré como salida el Sql Server, así que añadiremos lo siguiente a nuestro fichero de configuración

  
    
      
      
        
        
      
      
      
      
      
        
        
        
      
      
        
        
        
        
          
        
      
      
        
        
        
        
          
        
      
      
        
        
        
        
          
        
      
      
        
        
        
        
          
        
      
      
        
        
        
        
      
    
  

También debemos ejecutar el siguiente script sql en nuestra base de datos para almacenar los datos que queramos registrar.

CREATE TABLE [dbo].[Log] (
    [Id] [int] IDENTITY (1, 1) NOT NULL,
    [Date] [datetime] NOT NULL,
    [Thread] [varchar] (255) NOT NULL,
    [Level] [varchar] (50) NOT NULL,
    [Logger] [varchar] (255) NOT NULL,
    [Message] [varchar] (4000) NOT NULL,
    [Exception] [varchar] (2000) NULL
)

Llegados a este punto ya solo nos queda añadir un par de lineas a nuestro código y ya tendremos nuestro logger funcionando.

try 
{
  // ... código a trazar ...
}
catch (Exception ex)
{
  // Creamos nuestro logger
  ILogger logger = LogManager.GetLogger("Logger");
  // Cargamos la configuración
  XmlConfigurator.Configure();
  // Registramos nuestra excepción
  Logger.Error(ex.Message, ex);
}

Con poco esfuerzo y aprovechando un proyecto que funciona podemos trazar nuestras aplicaciones sin el mayor esfuerzo haciendo nuestras aplicaciones más robustas ya que podremos localizar más fácilmente nuestros puntos débiles y podremos corregirlos.

Como es de suponer log4net dispone de fábrica más appenders como por ejemplo
  • Log4net.Appender.AdoNetAppender
  • Log4net.Appender.AnsiColorTerminalAppender
  • Log4net.Appender.AspNetTraceAppender
  • Log4net.Appender.ColoredConsoleAppender
  • log4net.Appender.ConsoleAppender
  • log4net.Appender.DebugAppender
  • log4net.Appender.EventLogAppender
  • log4net.Appender.FileAppender
  • log4net.Appender.LocalSyslogAppender
  • log4net.Appender.MemoryAppender
  • log4net.Appender.NetSendAppender
  • log4net.Appender.OutputDebugStringAppender
  • log4net.Appender.RemoteSyslogAppender
  • log4net.Appender.RemotingAppender
  • log4net.Appender.RollingFileAppender
  • log4net.Appender.SmtpAppender
  • log4net.Appender.SmtpPickupDirAppender
  • log4net.Appender.TelnetAppender
  • log4net.Appender.TraceAppender
  • log4net.Appender.UdpAppender

Todos ellos listo para utilizar con muy poco esfuerzo. Para saber como usar estos appenders y como se pueden configurar recomiendo revisar la documentación oficial.

Happy coding!

Mas info | log4net

No hay comentarios:

Publicar un comentario