Uso de logback

Redactado por: Juan Francisco Reyes Silva


En el proceso de desarrollo de software se implementan bitácoras o mejor conocidas como loggers que permiten tener información de salida útil al desarrollador en cuanto al correcto flujo de la aplicación.

Este registro se divide en secciones: Logger, Formatter y Handler.

  • Logger: Es el responsable de captar el mensaje y pasarlo al marco de registro.

  • Formatter: Su función es dar formato a la salida. toma el objeto binario y realiza la conversión a una representación de cadena

  • Appender o Handler: Se le entrega el mensaje con formato al Appender, el cual puede ser visualizado en diferentes formas como son: consola, archivo, base de datos, servicios de mensajería, escribir en un socket.

Existen ciertos niveles de logger para diferenciar el tipo de salida que queremos generar:

Nivel Descripción
FATAL Errores graves que causan la terminación prematura
ERROR Otros errores de ejecución o condiciones inesperadas
WARNING Se utiliza para situaciones que podrían ser potencialmente dañinas
INFO Eventos interesantes de tiempo de ejecución (inicio / apagado)
DEBUG Información detallada sobre el flujo a través del sistema
TRACE Información más detallada

#Logback Este logger pretende ser el sucesor de log4j, fue diseñado por Ceki Gülcü, fundador de log4j’s. Para poder usar este logger, se requiere del módulo logback. Una configuración del archivo gradle queda de la siguiente manera:

apply plugin:'groovy'

repositories{
  jcenter()
}

dependencies{
  compile 'org.codehaus.groovy:groovy-all:2.4.4'
  compile 'ch.qos.logback:logback-classic:1.1.6'
}

El archivo groovy que se estará manejando para obtener la bitácora será logback.groovy el cual contiene el patrón de salida del logger además de especificar donde se mostrara dicha información.

import static ch.qos.logback.classic.Level.INFO
import static ch.qos.logback.classic.Level.DEBUG

import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.ConsoleAppender

appender("CONSOLE", ConsoleAppender) {
  encoder(PatternLayoutEncoder) {
    pattern = "%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg %n"
  }
}

appender("FILE", FileAppender) {
  file = "example_logger.log"
  append = true
  encoder(PatternLayoutEncoder) {
    pattern = "%d{HH:mm:ss.SSS} %-5level %logger{30} %msg %n"
  }
}
root(DEBUG, ["CONSOLE","FILE"])

Ahora el archivo se crea una instancia de la clase Logger. Además de contar con el nivel del logger, respetando la configuración que se hizo en el archivo logback.groovy.

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

Logger log = LoggerFactory.getLogger(getClass())

log.debug "*"*40
log.debug request.properties.toString()
log.error "Error"
log.warn "Warning"
log.info "Info"
log.trace "Trace"

Un ejemplo de como se vería:

logback

Acerca del patrón de salida

  • %d{HH:mm:ss.SSS} Es la hora que se realizo el proceso
  • [%thread] Indica el thread que inicio la tarea
  • %highlight(%-5level) Brinda el color acorde al nivel de logger que se esta usando
  • %cyan(%logger{15}) Muestra el nombre de la clase que esta tomando el logger, en color azul
  • %msg Muestra el msn que se manda acorde al nivel que se esta llamando
  • %n Indica el final de la línea

Pueden encontrar el código de ejemplo aquí.

comments powered by Disqus