Ir al contenido principal

Ejemplo logback

El otro día os hablaba de las bondades de logback. Como ya os dije, SFL4J es una capa de abstracción para nuestros sistemas de logging (similar a JCL) que liga una implementación concreta en el momento de la compilación. Logback es una implementación concreta de SFL4J, pero podemos utilizar SFL4J con diversas librerías de logging como log4j o java.util.logging.

En el siguiente gráfico vemos un dibujo sacado de la documentación oficial de SFL4J en el que se muestran varios escenarios de uso de SLF4J:

Escenarios de uso de SLF4J

En la gráfica podemos varios escenarios:


  • En el primer escenario (SLF4J unbound) no se liga ninguna implementación de SLF4J, por lo que no se escribe log. Sólo tendremos el jar slf4j-api.jar.
  • En el segundo escenario (SLF4J bound to logback-classic) ligamos logback a SLF4J. Esto lo explicaremos más adelante en nuestro ejemplo.
  • En el tercer escenario (SLF4J bound to log4j) ligamos log4j a SLF4J. Migrar de una aplicación en la que tenemos log4j y JCL es sencillo. Se puede hacer manualmente o mediante SLF4J Migrator.  En ambos casos las librerías se deben incorporar a mano en nuestra aplicación y son slf4j-api.jar y slf4j-log412.jar. La librería log4j también debería estar en nuestro classpath.
  • En el cuarto escenario (SLF4J bound to java.util.logging) ligamos java.util.logging a SLF4J. Para ellos utilizamos el jar slf4j-jdk14.jar y el sistema de logging que contiene la JVM
  • El sexto escenario se utiliza cuando queremos que una aplicación que escribe log no lo escriba. Se liga a una implementación que no escribe log (o lo envia a /dev/null). Para ello como siempre necesitamos el jar slf4j-api.jar y como binding el slf4j-nop.jar.

Me he puesto manos a la obra y he utilizado logback en una aplicación que se expone como servicio web. A continuación vemos los pasos más importantes. El proyecto lo he realizado con Eclipse 3.3 y el plugin WST instalado:

  • Creamos una aplicación web con Eclipse. En dicha aplicación una clase Java (en el paquete es.jpascu) será la implementación de un servicio web con Axis 1.4. Ver mi post anterior de creación de servicios web con Axis en Eclipse. 
  • En la implementación del servicio web y en las clases donde queramos que se escriba log importamos estas dos clases:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

  • Después nos definimos un Logger en cada una de ellas:

final Logger logger = LoggerFactory.getLogger(MiWs.class);


  • Luego escribimos varias sentencias de log por el código con varios niveles de log como log.debug("Mensaje"), log.info("Mensaje") y log.error("Mensaje")... Eso a nuestra elección...
  • Después incluimos las librerías de SLF4J (slf4j-api-1.5.11.jar) y logback (logback-classic-1.0.0.jar y logback-core-1.0.0.jar) como veíamos en el escenario 2 de la imagen de arriba:
Librerías de aplicación web con WS Axis y logback
  • Un tema importante es el caso de librerías de terceros que utilizan otro sistema de log, como ejemplo Axis 1.4 que utiliza JCL junto con log4j. Para utilizar este tipo de librerías (por eso he hecho el servicio web, para utilizar Axis) debemos incluir una librería que nos haga de puente para este tipo de aplicaciones y eliminar el commons-logging de nuestro classpath si estuviese. En nuestro caso, el jar puente es jcl-over-slf4j-1.5.11.jar (último escenario de la imagen de arriba).
  • Por último, nos quedaría añadir a nuestro classpath el fichero de configuración de logback. El fichero puede ser lo complejo que queramos y podemos añadir muchas características de logback (jmxConfigurator, MDC, nuevos appenders...). Si queréis podéis consultar la documentación de SLF4J. Yo os pongo un fichero sencillito que configura un file appender con un filtro de mensajes de nivel INFO, 300 días de historia y 5 líneas en los mensajes de trazas. Vosotros podéis ir añadiendo lo que queráis para probar las diferentes características de logback:



 
 
  
   INFO
  
  
   rutaDirectorioLog/aplicacion.log
  

  
  
   
    %date %-5level %logger{20} - %message%n %exception{5}
   
  

  
   
    /opt/bea/weblogic92/aplicaciones/logs/internacionalGBC/internacionalGBC.log.%d{yyyy-MM-dd}.log
   
   
   30
  
 


 
  
   
    %date{HH:mm:ss.SSS} %-5level %logger{10} - %message%n
   
  
 


Espero haber ayudado a integrar logback en vuestras aplicaciones.

Salu2.

Comentarios

  1. Gracias por el post.
    Y viva Murcia que tierra mas bonika!!!!

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Soluciones Alchemy Classic 389 elementos

Hace algún tiempo salió una actualización del Juego Alchemy Classic en la que aparecían más elementos (389 en lugar de 238). Aparte de añadir elementos mejoran algunas traducciones en castellano y mejoran la interfaz, aunque todavía hay algún error en algunos nombres de elementos. Aquí os dejo las soluciones para los que estén atascados y no puedan dormir por las noches: Sustancia primaria Aire=Elemento primario  Fuego=Elemento primario  Agua=Elemento primario  Tierra=Sustancia Primaria Arena=Piedra + Aire Piedra=Tierra + Fuego Arcilla=Arena + Pantano Caliza=Tierra + Amonitas Carbono=Fuego + Madera Cloro=Fuego + Sal + Electricidad CO2(Dióxido de Carbono)=Ceniza + Ácido nítrico Electricidad=Relámpago+ Metales Gas natural= Yacimiento de gas + Pozo Helio=Refinería de gas + Gas Natural Hidrógeno=Electricidad + Agua Hielo=Frío + Agua Imán=Piedra + Metales Metano=Deshechos Vegetales + Pantano Oxígeno=Electricidad + Agua Petróleo=Unidad

JAXB: Leer y escribir ficheros XML

Muchas veces en nuestras aplicaciones debemos manejar documentos XML ( Extensible Markup Language ). Este lenguaje se ha convertido en un estándar para intercambio de datos entre programas y aplicaciones a través de Internet. En un esquema XML (o  XSD ) podemos definir los elementos que pueden aparecer en un documento XML así como las relaciones entre los mismos. JAXB ( Java Architecture for XML Binding ) es un estándar Java para transformar un esquema XML (o  XSD ) en una representación a objetos java. Mediante la API de JAXB podemos mapear un objeto Java a un documento XML ( "marshall" ) y el proceso contrario, es decir, a partir de un esquema XML crear su conjunto de objeto Java asociado ( "unmarshall" ). JAXB Resumiendo lo que nos proporciona JAXB es: Generación de objetos Java a partir de un XSD a través de un compilador Proporciona capacidades de marshall/unmarshall (escribir fichero XML desde java y al contrario) Integración con Maven a través de xj

Matemáticas y cine.

El otro día estaba viendo por la televisión una película llamada 21 blackjack . En una escena de la película el profesor de matemáticas ( Kevin Spacey ) le presenta a uno de sus alumnos la siguiente situación: se encuentra en un concurso en la que debe escoger entre tres puertas (1,2 y 3). En dos de ellas hay una cabra, sin embargo en una de las 3 hay un flamante coche nuevo. El alumno responde que quiere abrir la puerta. El presentador, conocedor de lo que hay detrás de cada puerta decide abrir otra puerta diferente mostrando detrás de ella una cabra. El profesor se dirige al alumno y le pregunta, ¿cambiarías la puerta o te quedarías con la puerta que tienes? Muchos de nosotros cambiaríamos de puerta pensando que es una treta del presentador para engañarnos. ¿Cual elegiríais vosotros? Al comienzo tenemos 1/3 de probabilidades de acertar la puerta donde está el coche. Una vez que el presentador abre la puerta con una cabra, la mayoría de gente piensa que hay la misma probabilidad de