Las herramientas de logging permiten a los programas (y a los programadores) volcar información de lo que sucede en la ejecución de los mismos, normalmente en archivos de texto. Debido a la complejidad de los programas actuales, los logs son muy importantes para saber lo que está ocurriendo en la ejecución de un programa. Mediante los logs es posible detectar fallos que hayan ocurrido en un programa después de que éstos se hayan producido y de esta manera poder evitar consecuencias peores.
Una de las mayores ventajas de cualquier API de logging sobre la tradicional impresión de información en pantalla o en un fichero (el clásico printf de C o el System.out.println de Java) es que permite habilitar y deshabilitar ciertos logs mientras otros no sufren ninguna alteración. No es raro que en cualquier programa se nos "cuele" alguna impresión de alguna línea que indique en qué punto del programa se está ejecutando. Gracias a las herramientas de logging este problema puede ser controlado fácilmente.
Log4J [14] (pronunciado como "Log for Java") es un producto Open Source desarrollado por el grupo Apache que permite a los desarrolladores controlar la salida de sus mensajes y hacia donde son direccionados con gran granularidad. Esta herramienta es completamente configurable en tiempo de ejecución utilizando archivos externos de configuración. Aunque Log4J inicialmente fue desarrollado para Java, debido a su gran popularidad ha sido implementado en otros muchos lenguajes como: C, C++, C#, Python, Ruby, Eiffel, PHP, etc.
Log4J tiene por defecto 5 niveles de prioridad para los mensajes de logs:
Adicionalmente a estos niveles de log, existen dos niveles extras que sólo se utilizan a nivel de configuración:
Además de las posibilidad de elegir prioridad para los mensajes de logs, Log4J permite que los mensajes de logs se impriman en múltiples destinos. En Log4J un destino de salida se denomina Appender. Las distintas posibilidades que ofrece son:
Log4J también permite definir el formato de los mensajes de logs. Estos formatos se definen mediente layouts. Los tipos de layouts son:
Finalmente, en lo que se refiere a rendimiento, el objetivo principal de Log4J es la velocidad aún por encima de la flexibilidad. Uno de los argumentos utilizados en contra de realizar logging es el coste computacional. Esto no debería ser un problema para las aplicaciones "normales" (si lo podría ser para aplicaciones en tiempo real). Para ver que el rendimiento no se ve "seriamente" afectado, se deben tener en cuenta los siguientes puntos (los tiempos son tomados con un Pentium II de 233 MHz):
Por tanto, viendo las distintas posibilidades que ofrecen estas herramientas, las ventajas que aportan y el rendimiento que ofrecen, parece claro que es recomendable utilizar herramientas de logging en las aplicaciones, a excepción de los sistemas de tiempo real.