31 de enero de 2016

La bitacora en aplicación java

Todos los servidores aplicativos, cuentan con un sistema de bitácoras (logs). Este sistema de bitácoras, es posible aprovecharlo para desarrollar una aplicación web, sin necesidad de definir, ni depender de una implementación de bitácora en particular.

Requisitos

  • ubuntu 14.04
  • docker
  • cliente svn

Instalación

Código fuente

Crear el directorio de trabajo
$ mkdir -p $HOME/razzek/lab/java-logging
Descargar el codigo fuente
$ cd $HOME/razzek/lab/java-logging
$ svn co https://svn.riouxsvn.com/razzeklabs/trunk/java_logging/ .

Ejecución

Ejecutar los scripts
$ cd $HOME/razzek/lab/java-logging
$ ./00-storage.sh && ./01-tomcat.sh && ./01-wildfly.sh
En este punto, se tiene en ejecución 2 servidores aplicativos, un tomcat (8.0.x) y un JBoss (9.0.2.Final). El servidor JBoss no esta modificado, el servidor tomcat se modificó, para agregar el grupo manager-script y el usuario deploy, para poder deployar utilizando la aplicación manager, también se agregan los jars slf4j-api-1.7.13.jar y slf4j-jdk14-1.7.13.jar

Compilación y construcción

Para compilar y generar el artefacto a deployar (war) en ambas aplicaciones, se ejecuta el script:
$ ./02-build.sh
Para validar el artefacto generado, se ejecuta el script:
$ ./testwar.sh
El resultado muestra algo similar a:
Archive: /mnt/deployment/app.war
   testing: META-INF/ OK
   testing: META-INF/MANIFEST.MF OK
   testing: WEB-INF/ OK
   testing: WEB-INF/classes/ OK
   testing: WEB-INF/classes/razzek/ OK
   testing: WEB-INF/classes/razzek/java/ OK
   testing: WEB-INF/classes/razzek/java/logging/ OK
   testing: WEB-INF/content.jsp OK
   testing: WEB-INF/web.xml OK
   testing: WEB-INF/classes/razzek/java/logging/LogServlet.class OK
   testing: META-INF/maven/ OK
   testing: META-INF/maven/razzek.java.logging/ OK
   testing: META-INF/maven/razzek.java.logging/javaLogging/ OK
   testing: META-INF/maven/razzek.java.logging/javaLogging/pom.xml OK
   testing: META-INF/maven/razzek.java.logging/javaLogging/pom.properties OK
No errors detected in compressed data of /mnt/deployment/app.war.
El artefacto generado, no contiene jars, pero se emplea slf4j (existentes en JBoss 9 y agregadas a tomcat 8), para generar entradas en la bitácora (trace, debug, info, warn y error).

Bitácoras

Tomcat utiliza la bitacora nativa de java (java.util.logging) y JBoss utiliza log4j. Al ejecutar el script
$ ./03-log.sh
Se modifica la configuración indicando al sistema de bitácoras que los mensajes generador por razzek.java.logging, se alamacenen en el archivo app.log.

Para mostrar el contenido del archivo app.log, dentro del contenedor docker. se ejecuta el script para tomcat
$ ./tail-tomcat.sh
 o para wildfly:
$ ./tail-wildfly.sh

Instalación

Para instalar la aplicación creada en el paso de compilación y construcción. Se ejecuta el script:
$ ./04-deploy.sh
El script deploya tanto en tomcat, como en wildfly.

Validación

Para validar la instalación, se invoca la url para tomcat:
http://127.0.0.1:32000
Y para wildfly
http://127.0.0.1:32001
Verificando que los logs se muestran en cada invocación en los respectivos archivos de logs (scripts tail)

Conclusión

Como se puede comprobar, la bitacora, se configuró de manera externa a la aplicación. Y las bibliotecas asociadas a slf4j no se incluyeron en la construcción. Permitiendo minimizar el tamaño de artefacto (WAR) e incluso manterner una configuración independiente por servidor aplicativo (algo que se puede aplicar cuando se cuenta con multiples ambientes) sin necesidad de modificar archivos de configuración en cada nueva instalación (algo común en los sistemas actuales).

No hay comentarios.:

Publicar un comentario