Talend Open Studio y Log4j (II)

Tras un par desemanillas trabajando con Talend, he sufrido un par de problemas con respecto al logado de información que merece la pena compartir.

El primero, reside en que muchos componentes escriben directamente por la salida estándar o por la salida de error . ¿Qué problema ocasiona esto? pues que a la hora de trazar la ejecución de un job tienes que estar revisando tanto la salida estandar (el catalina.out en caso de estar corriendo los jobs como web services en tomcat) como los ficheros de logs que hayas configurado en el componente tInitLog4j. Para subsanar esto bastaría con un incluir un “proxy” en cada una de las salidas de modo que escriban la información que se envíen a ellas a los loggers pertinetes con su correspondiente nivel de log:

/**
* Con esta función pretendemos crear un objeto PrintStream que ademas de escribir en el flujo original deje registro en los ficheros de log
* @param originalStream Stream que estamso observando
* @param errorLog se trata de mensajes de error o estándares
* @return el nuevo PrintStream
*/
public static PrintStream logProxy(final PrintStream originalStream, final boolean errorLog) {
return new PrintStream(originalStream) {
public void print(final String message) {
// Seguimos enviando el texto al Stream original
originalStream.print(message);
if (errorLog) {
logger.error(message);
} else {
logger.info(message);
}
}
};
}

Para insertar el “proxy”:

System.setOut(logProxy(System.out, false));
System.setErr(logProxy(System.err, true));

Esta mejora se la he reportado en bcourtine para que la incluya en próximas versiones de tInitLog4j

El segundo problema al que me enfrenté fue el de sustituir todos los tLogRow que utilizábamos por tLog4j, dado que el componente tLogRow en la versión Open Studio no utiliza log4j para emitir los datos que por él pasan. El componente tLog4j no tiene el mismo “contrato” que tLogRow, básicamente no permite la utilización de esquemas complejos, y te obliga a escribir continuamente en el mensaje de log la concatenación de cada variable que quieras logar.

tLog4j

Para evitar esta ardua tarea decidí implementar mi propia versión de tLogRow de modo que pudiera sustituir todos los tLogRow por este nuevo componente sin necesidad de reescribir código. De ahí nació tLog4JRow, ya está disponible en Talend Exchange. Su uso es muy simple y tiene opciones muy similares a las de tLogRow, así que la transición de un componente a otro es inmediata

tLog4jRow

 

Y con esto y un bizcocho… doy por terminado este post

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s