La librería Log4j para emitir trazas en aplicaciones Java
Escrito por
el .
java
planeta-codigo
programacion
Enlace permanente
Comentarios
La librería Log4j es una librería para emitir las trazas de depuración e información indispensables cuando son requeridas en una aplicación Java. Es la librería sucesora de logback y aunque no es imprescindible suele usarse en combinación con slf4j ya que esta permite cambiar de librería de logging subyacente sin hacer ningún cambio en la aplicación.
Algunas de las nuevas características de log4j son:
- Rendimiento mejorado usando funcionalidades asíncronas en los loggers.
- Soporte para múltiples APIs como SL4J, Commons Logging y java.util.logging (JUL).
- Sin encadenamientos a la librería al poder en cualquier momento usar cualquier librería compatible con SLF4J.
- Recarga automática de la configuración sin perder ninguna traza.
- Filtrado avanzado basado en datos de contexto, marcadores, expresiones regulares y otros componentes.
- Arquitectura basada en plugins.
- Soporte de propiedades definidas en archivos de configuración, propiedades del sistema, variables de entorno, el mapa ThreadContext y datos del evento.
- Soporte de lambdas de Java 8. Las expresiones lambdas no se evalúan si no está activado el nivel de log consiguiendo el mismo efecto que con una sentencia if pero en menos código.
- Niveles de log personalizados fácilmente definibles sin necesidad de realizar subclases.
- Recolección de basura reducida lo que evita presión al recolector de basura y mejora el rendimiento de las aplicaciones.
Por defecto, la configuración de Log4j se describe en un archivo xml aunque también soporta definirlo en un formato menos verboso como yaml. La siguiente aplicación de Spring Boot al iniciarse emite en la consola varios mensajes usando log4j2.
Usando la clase LogManager se obtiene una referencia a la clase Logger con la que se emiten las trazas y que posee diferentes métodos para cada nivel de traza.
Una vez se ha iniciado la aplicación Spring Boot invoca el método run y se emiten las trazas propias de la aplicación después de las que también Spring Boot y otras librerías emiten., en este caso usando texto en forma de arte ascii.
|
|
|
|
En el archivo de construcción de la aplicación usando Gradle hay que incluir las dependencias de las librerías.
|
|
|
|
Las trazas son muy importantes por la valiosa información que proporcionan de lo que está sucediendo en una aplicación a los que recurriendo es posible obtener la valiosa información que permite saber que ha sucedido en una determinada acción o que permite descubrir mucho más rápidamente la causa de un error.
En otro artículo ya he comentado como usar marcadores con sl4j y logback para relacionar trazas que son emitidas en diferentes clases o módulos de la aplicación, también se puede hacer con Log4j. En siguientes artículos comentaré como transformar un objeto a un mensaje sin necesidad de convertir ese objeto a un String en cada traza de la aplicación donde se use su información y otra forma de relacionar trazas muy útil en aplicaciones web asignando un identificador única en cada petición y emitiéndolo en todas sus trazas, esto permite saber todo lo que ha ocurrido en una petición entre las muchas que se ejecutan concurrentemente por todos los usuarios de la aplicación.
Si las trazas no son suficientes para descubrir la causa de un error otra forma de conseguirla es depurar la aplicación con un IDE, ver paso a paso su ejecución y con la posibilidad de inspeccionar los valores de las variables. Una vez descubierta la causa del error de cualquiera de las maneras se pueden hacer los cambios necesarios en el programa para corregirlos.
El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub y probarlo en tu equipo ejecutando siguiente comando:./gradlew run