martes, 3 de febrero de 2015

SLF4J - Log4J - Jax-Rs - Glassfish

Simple Logging Facade for Java (SLF4J) sirve como una fachada o abstracción para el framework de logueo utilizado. (java.util.logging, logback, log4j) permitiendo al usuario final conectar el framework deseado en tiempo de despliegue.

Log4j, es una librería para logueo en Java.

En este post veremos como habilitar el logueo en aplicaciones REST desplegadas en Glassfish 4.0 utilizando SLF4J y el framework Log4J. Pasos:

incluir las dependencias

Incluir la dependencia para SLF4J.

dependencies {
 providedCompile ( 
  ['javax.ws.rs:javax.ws.rs-api:2.0.1'],
  ['org.glassfish.jersey.containers:jersey-container-servlet:2.13'],
  ['com.sun.jersey:jersey-server:1.18.1'],
  ['org.eclipse.persistence:org.eclipse.persistence.jpa:2.5.2']
 )
 
 compile(['org.slf4j:slf4j-log4j12:1.7.10'])
    
        runtime files(['libs/ojdbc7.jar'],['libs/ojdbc14.jar'])
    
 testCompile 'junit:junit:4.11', 'org.mockito:mockito-core:1.10.8'
}

La dependencia antes descrita descarga tanto SLF4J como Log4J.

Agregar archivo lo4j.properties a glassfish

  • Crear log4j.properties
  • Crear el archivo log4j.properties con el siguiente contenido:

    # Root logger option
    log4j.rootLogger=DEBUG, file
     
    # Redireccionar el log de mensajes a un archivo
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=${com.sun.aas.instanceRoot}/logs/archivo.log
    log4j.appender.file.Append = true
    log4j.appender.file.MaxFileSize=5MB
    log4j.appender.file.MaxBackupIndex=10
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    

    Colocar el archivo antes creado en /Applications/glassfish4/glassfish/domains/domain1/config

  • Agregar log4j.jar
  • colocar el jar log4j en el directorio glassfish/lib de glassfish

  • Agregar opción JVM para logueo log4j
  • Agregar la siguiente opción de la máquina virtual de java al servidor

    -Dlog4j.configuration=file:///${com.sun.aas.instanceRoot}/config/log4j.properties

    Para realizarlo abrir la consola de glassfish —> Configurations —> server-config —> JVM Settings —> Jvm options

    Click en save

    Restart glassfish

Utilizar sentencias proporcionadas por el API

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Implementación del consumo del catálogo x obteniendo la información
 * desde x repositorio.
 * 
 * @author Clemente Morales Fernández
 * @since Jan 12, 2025
 *
 */
public class CatalogoImpl implements CatalogoSexo {
    /**
     * Logueo de eventos de la aplicación.
     */
    final Logger log = LoggerFactory.getLogger(CatalogoImpl.class);
    
    @Override
    public List getSexos() {
        String catalogo = getCatalogoDesdeRepositorio();
        log.info(String.format("Catalogo obtenido desde repositorio x. %s",
                catalogo));
        return CatalogoConverter.toTransferObject(catalogo);
    }

    /**
     * Permite obtener el catálogo desde el repositorio.
     * 
     * @return Catálogo ...
     */
    private String getCatalogoDesdeRepositorio() {

        String catalogo = "";
        try {
            
            catalogo = obtenerCatalogo();
        } catch (Exception exception) {
            log.error("Error obteniendo el catálogo x. ", exception);
        }
        
        return catalogo;
    }
}