Talend : Un exemple de composants customisés
Par david le jeudi 17 avril 2008, 18:43 - technique - Lien permanent

Après avoir introduit Talend dans le post précédent, on enchaîne avec la présentation de composants customisés.
Ce post va vous fournir les ressources pour utiliser 2 composants dédiés à l’utilisation du framework Log4J au sein de Talend Open Studio.
Un des composants initialise le framework (à l'aide d'un fichier XML) et l'autre sert à générer un log avec le niveau souhaité et le l’objet logger (au sens log4j) souhaité.
Cela fait suite à mes diverses missions pour Talend ou assez régulièrement il fallait distinguer un flux de logs fonctionnels et un flux de logs techniques.
Les composants Log4J permettent de répondre simplement à la mise en place de logs fonctionnels (comptes- rendus, suivi d’avancée, etc...), les logs techniques étant couvert par les composants classiques talend, et l'AMC (un outil d’analyse de logs techniques officiel Talend).
Voici quelques informations sur les composants que j'ai mis à disposition sur l’écosystème talend (http://www.talendforge.org/ext/index.php) :
Commençons par le plus important : les icônes :D

Une cafetière et un mug ;)
Merci à Mathieu LECARME pour ces ô combien magnifiques icônes, mettant en oeuvre des techniques graphiques ancestrales issues du temps béni des défunts atari st et amiga.
L'icône de la cafetière correspond au composant tInitLog4J, ayant pour rôle d’initialiser le framework de log.
Le mug correspond au composant tLog4J ayant pour rôle la génération d’un log à un endroit du job, en utilisant un des loggers définis dans le fichier de configuration de log4J ( chargé par tInitLog4J au préalable) , plus un niveau de log (au choix entre DEBUG, WARN,INFO,ERROR,FATAL) et bien sur d’un message.
-
-Restrictions / précisions sur l'utilisation de ces composants :
-
- Une même configuration de log4j pour tous les jobs s'exécutant dans une même JVM (cela n'empêche pas d'avoir des loggers / sorties de logs différentes dans chaque jobs)
-
-Gestion du multi-threading (pas de problème de reset de la configuration si des sous jobs sont lancés en parallèles et contiennent eux aussi le composant d'initialisation du framework log4j) --> permet de lancer les jobs un par un ou en parallèle avec un "master job".
-
-L'initialisation ne sera toujours faite qu'une seule fois (gain en performance et obtenu grâce a la restriction ci-dessus)
- Support du mode de configuration XML de log4j uniquement.(le mode de configuration XML est le seul mode qui permet d'utiliser le mécanisme de logging asynchrone de log4j, c'est une best practice que d'utiliser ce mécanisme).
- Les composants appartiennent à une sous famille "log4j" de la famille "Logs & Errors".
Apres avoir téléchargé ces composants depuis l’écosystème Talend, si c’est la première fois que vous utilisez des composants customisés, vous devrez aller dans le menu des préférences Talend (window > preferences...> talend )
choisir components et preciser un répertoire a votre convenance (en dehors du répertoire de Talend Open Studio de préférence)

Un exemple d’utilisation : un job qui classes des nombres pairs et impairs et utilise les 2 composants ci-dessus :

Donc un flux de nombres aléatoires en entrée et deux flux en sorties : nombres pairs et impairs.
Le premier composant est donc notre magnifique cafetière.
Si l’on regarde ses propriétés, elle prend en paramètre l’emplacement d’un fichier XML (spécifié en dur dans cet exemple, mais bien sur à mettre en tant que paramètre contextuel).

Le contenu de ce fichier est le suivant :
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<appender-ref ref="SystemOut" />
</appender>
<appender name="SystemOut" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %5p %c - %m%n" />
</layout>
</appender>
<appender name="debugfile"
class="org.apache.log4j.RollingFileAppender">
<param name="maxFileSize" value="100KB" />
<param name="maxBackupIndex" value="5" />
<param name="File" value="c:/debug.log" />
<param name="threshold" value="debug" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ABSOLUTE} %c - %m%n" />
</layout>
</appender>
<appender name="errorfile"
class="org.apache.log4j.RollingFileAppender">
<param name="maxFileSize" value="100KB" />
<param name="maxBackupIndex" value="5" />
<param name="File" value="c:/error.log" />
<param name="threshold" value="error" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ABSOLUTE} %c - %m%n" />
</layout>
</appender>
<logger name="errorLogger">
<level value="error" />
<appender-ref ref="errorfile" />
</logger>
<logger name="debugLogger">
<level value="debug" />
<appender-ref ref="debugfile" />
<appender-ref ref="SystemOut" />
</logger>
<root>
</root>
</log4j:configuration>
Ce fichier définit donc 2 loggers : errorLogger et debugLogger, debugLogger a 2 sorties : la sortie standard et un fichier, et errorLogger n’a qu’une sortie vers un fichier.
Si ce fichier reste un mystère, je vous renvoie vers la documentation de log4J et plus précisément du fichier XML de configuration ici : http://wiki.apache.org/logging-log4j/Log4jXmlFormat
Chacun des mugs en sortie du tMap va utiliser un de ces loggers.
Arbitrairement le logger (un composant tLog4J) des nombres pairs va utiliser le logger “debugLogger” et celui des nombres impairs le “errorLogger”
Screen du logger des nombres impairs :

Screen du logger des nombres pair :

Voila, that’s all ;)
Ces composants sont un peu brut de fonderie niveau choix proposés, et contrôles d’erreur sur la saisie d’un logger erroné par exemple.
Mais je les ai voulu les plus simples et performants possibles, le framework log4J étant auto suffisant en terme de flexibilité offertes par la suite.
Toutes remarque / suggestion est bien entendue la bienvenue ;)
Commentaires
Salut,
Justement le genre de petit composant que je cherchais mais malheureusement il n'apparaît pas dans la palette après son installation.
:-/
Talend : 2.4 (linux)
Bonsoir,
Tout d'abord merci pour ce composant très pratique pour mes flux. Cependant, ce composant ne fonctionne plus avec la version 3.1.2 de Talend (version actuelle), il fonctionne très bien avec la version 3.0.4 mais maintenant impossible de l'initialiser. Pourriez-vous faire une mise à jour si ce n'est pas trop compliqué à mettre en œuvre car il serait dommage qu'il ne puisse plus être utilisé :(
Merci.
Salut, merci pour ce composant, essayant moi-même d'en créer un, il va surement m'aider.
J'ai quand même beaucoup de problemes pour faire ce que j'essaye mais perseverance !!