Log4net

Log4Net es una libreria para escribir logs, es decir, dejar trazas del funcionamiento de la aplicacion que sirven para indentificar fallas, depurar y monitorear el funcionamiento de la aplicacion.

Log4net es un proyecto open source con licencia Apache 2.0. Fue portada a .NET a partir de la exitosa libreria para Java log4j. Con el tiempo se ha vuelto una de las librerias mas populares para logging en .NET.

Log4net implementa las siguientes caracteristicas:

  • Pemite emitir logs a multiples destinos, entre otos: archivos de texto, base de datos, Registro de Eventos de Windows, email.
  • Es posible organizar las entradas del log en categorias jerarquicas que se asemejan a espacios de nombres y clases del codigo fuente.
  • Log4net puede monitorear el archivo de configuracion y volver a procesarlo al detectar una modificacion, de esta forma no es necesario reiniciar la aplicacion para cambiar el comportamiento del componente.
  • Entrega facilidades para recabar informacion de contexto que queda disponible al momento de escribir en el log, por ejemplo, informacion sobre el hilo de ejecucion, el proceso, el usuario.
  • Genera un minimo impacto en la performance de la aplicacion, Log4net fue diseñada para ser rapida.
  • Es una architectura probada que ha sido portada a varias plataformas y lenguajes, muy flexible y extensible.

Conceptos Basicos

Log4net define 5 conceptos basicos: Logger, Appender, Level, Filter y Layout. Es importante adquirir estos conceptos pues son la base para definir el comportamiento de Log4net y son usados en los tutoriales y ejemplos.

Logger

Logger es el objeto que se usamos en el codigo fuente para escribir las entradas en el log. Logger implementa la interface ILog que tiene diversos metodos para escribir entradas.
Es util usar categorias para clasificar las entradas del log, de hecho es aun mas util usar como categorias los espacios de nombre y clases del codigo fuente. Por ejemplo, una entrada puede pertenecer a la categoria "Erp.Productos.Mantencion" y otra pertenecer a la categoria "Erp.Ventas.Ordenes". Luego, cuando la aplicacion este en produccion podemos modificar la configuracion para activar o desactivar el registro de entradas para la gran categoria "Erp", o para las subcategorias "Erp.Ventas" o "Erp.Productos", o seleccionar mas directamente "Erp.Productos.Mantencion" u "Erp.Ventas.Ordenes". Log4net interpreta el punto "." tal como lo hacen los lenguajes de programacion, como pertenencia, de esta forma permite definir configuracion con diferente nivel de granuralidad que son recibidas en cascada por los niveles que estan mas abajo en la jerarquia.
Cuando obtenemos el objeto Logger debemos indicar a que categoria perteneceran las entradas que registremos con ese Logger, para ello pasamos el nombre de la categoria al metodo LogManager.GetLogger() como vemos en el codigo a continuacion.

ILog logger = LogManager.GetLogger("Erp.Productos.Mantencion");

Si va a usar los espacios de nombre y clases como categorias (optativo), puede usar una sobrecarga del metodo LogManager.GetLogger() que acepta un Type. Log4net usa el nombre completo del tipo incluido el espacio de nombre como nombre de la categria de las entradas. El gran beneficio de esta practica es que uno sabe inmediatamente de que clase se escribieron las entradas cuando se revisa el log, facilitando la resolucion de problemas. Para implementar este diseño cada clase que va a escribir en el log obtiene su propio Logger pasando su Type.

ILog logger = LogManager.GetLogger(typeof(Erp.Productos.Mantencion));
Level (Nivel)

Log4net define 5 niveles para las entradas del log, en orden de menor a mayor: Debug, Info, Warn, Error y Fatal. Esta clasificacion es util para determinar que entradas se escriben y donde se escriben. Por ejemplo, podemos definir que normalmente se registren solo entradas de nivel Error o superior, pero si detectamos un error podemos cambiar la configuracion para que se registren entradas Debug o superior, y usamos esta mayor cantidad de informacion para diagnosticar el problema.
El objeto Logger define metodos con el mismo nombre que los niveles para ingresar entradas al log: Debug(), Info(), Warn(), Error() y Fatal().

Appender

Appender rerpresenta el destino en el que se escribiran las entradas del log. Por ejemplo, FileAppender escribe en un archivo de texto plano, AdoNetAppender escribe a una base de datos, EventLogAppender escribe en el registro de eventos de Windows.
Log4net permite configurar multiples destinos y definir que entradas se registran en uno o mas destinos segun su categoria, nivel y otros filtros mas avanzados.

Filtro (Filter)

Los filtros estan relacionados con los Appenders, permiten filtrar que entradas se registraran en el appender. El filtro mas basico es por Nivel, por ejemplo, solo entradas con Nivel Error o superior. Otro filtro sencillo es por la categoria de la entrada. Pero Log4net permite otros filtros mas avanzados tales como comparar una propiedad de la entrada con un valor especifico, verificar la entrada contra un patron de expresion regular.

Layout

Layout define como se expresa en texto la entrada para ser registrada en un destino (Appender). Se define una plantilla indicando que informacion se escribe y en que orden.
Por ejemplo, la plantilla

%timestamp %-5level %logger - %message%newline

Escribira en el log:

176 INFO  Erp.Ventas.Ordenes - Se registro la orden

Log4net es altamente extensible, podemos crear nuestros propios Appenders, Filters, Layouts, Loggers e incorporarlos al funcionamiento de log4net usando el archivo de configuracion. Para ello debemos implementar las interfaces que representan los componentes: IAppender, IFilter, ILayout e ILog, respectivamente.

La mejor forma de entender a cabalidad estos conceptos y como se relacionan es ponerse manos a la obra y usar la libreria. Puede continuar con el Tutorial Introductorio de Log4net que lo guiara paso a paso para empezar a registrar entredas en el log. Luego puede revisar los Ejemplos de Log4net (Proximamente) que presenta diversos ejemplos de uso y configuracion.

Articulos relacionados