Commons Logging

RECU-0225 (Recurso Ficha Técnica)

Descripción

Introducción

Es una pasarela a diferentes librerías de logging. Las librerías de logging que soportan integración; son Log4J, Avalon LogKit, SimpleLog y el propio JDK. Los objetivos de esta pasarela son:

  • Encapsular el API de log que decidamos utilizar en cada aplicación.
  • Proporcionar una única manera de implementar el registro de estados, testeo de usos y rastreo de errores, sin tener en cuenta el API de log que haya por debajo.

Normalmente se utiliza el componente Commons Logging para quitar dependencias en tiempo de compilación o ejecución a cualquier paquete de log, y ofrecer un interfaz común para generar logs independientemente de la librería elegida, es decir utilizamos el api de commons-logging en las declaraciones y el api del componente elegido en la ejecución.

Existen tres versiones de la librería commons-logging:

  • la normal, que contiene su api y las clases para la implementación
  • api, solo contiene su propia api
  • adapters, solo contiene las clases necesarias para la implementación

Dos son las clases principales de este componente, Log y LogFactory. Log es el componente fundamental, es el que implica el registro propiamente hablando. Seis son los niveles de rastreo utilizado por el interfaz Log, dependiendo de su importancia de menor a mayor son, trace, debug, info, warn, error y fatal, asociado a cada nivel hay un método con el mismo nombre.

LogFactory es la factoría de objetos Log. Seguirá el siguiente orden para determinar que tipo de objeto log instanciar:

  1. Busca un fichero de propiedades llamado commons-logging.properties visible en el classpath de la aplicación.
  2. Busca una propiedad de sistema llamada org.apache.commons.logging.LogFactory dentro del fichero.
  3. Si el componente Log4J está disponible en el classpath de la aplicación utiliza la clase Log4JLogger, se necesita tener el archivo log4j.jar en la carpeta lib y su archivo de configuración correspondiente, este puede ser un archivo properties o un xml. Si no encuentra el archivo de configuración dará una advertencia y no funcionará log4j ni seguirá buscando otro componente.
  4. El siguiente paso es usar el logger integrado dentro del JDK en uso, bien sea el 1.4 o el 1.5.
  5. Y por defecto si no encuentra ninguno de los anteriores utilizará la clase SimpleLog

Usos y recomendaciones conocidas

  • Recomendado por el Framework Spring
  • Habitual su uso en entornos de la Junta de Andalucía
  • Incluido en los principales IDE's de desarrollo

Ejemplo de uso

A continuación se muestra el fichero de propiedades commons-logging.properties. Implementación del log con Log4J.

org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl

Una vez configurado el fichero de propiedades podríamos utilizar logs de la siguiente manera:

CommonsLoggingExample.java import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class CommonsLoggingExample
{
    static Log log = LogFactory.getLog(CommonsLoggingExample.class);
    public CommonsLoggingExample()
    {
        try
        {
           log.debug("Clase inicializada");
        }
        catch (IllegalStateException e)
{
           log.error("Se ha producido un error" , e);
        }
    }
   
    public void metodo(String mensaje)
    {
        log.info("Llamada al metodo método con mensaje " + mensaje);
    }
}

Requisitos e incompatibilidades

Tener instalado la versión 1.4 de la JDK