Utilitaires
Scripts
Divers
Jeux
Rechercher
Quillevere.net
Paradigmes informatiques

Utiliser Log4J sur Talend

16/01/2021

L'utilisation de Log4J pour tracer les logs Talend n'est pas toujours simple à mettre en place. Voici quelques informations sur son utilisation.

Fichier de configuration Log4J2

J'ai créé le fichier de paramétrage Log4J2 ci-dessous afin de proposer les éléments suivants :

  • Affichage des lignes de log dans la console (avec seulement l'heure et le niveau de log)
  • Ecriture des lignes de log dans un fichier, avec la date/heure et le niveau de log
  • Création d'un fichier de log par lancement, afin de séparer les exécutions
  • Rotation des fichiers de logs : seulement les 200 derniers fichiers sont conservés
  • Le dernier fichier de log créé se nomme "rapport.log"
  • Les fichiers sont écrits dans un répertoire :
    • soit dans le chemin relatif .. / .. / log par rapport au chemin d'exécution
    • soit dans le répertoire précisé par la variable d'environnement nommée "LOG4J"

Pour l'utiliser :

  • Allez dans le menu Fichier puis Modifier les propriétés du projet

  • Cliquez sur Log4J dans la fenêtre de gauche
  • Cochez Activer Log4J dans les composants, vérifiez que log4j2 est bien sélectionné

  • Puis collez le code ci-dessous :
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="info" name="XMLConfigTest" packages="org.apache.logging.log4j.test">
        <!-- Utilise la variable d'environnement utilisateur LOG4J ou le chemin relatif si n'existe pas -->
        <Properties>
     <Property name="log-path">${env:LOG4J:-./../../log}/</Property>
     </Properties>
     <ThresholdFilter level="info"/>

     <Appenders>
        <!-- Paramètre d'affichage de la console-->
     <Console name="sortie_console">
         <PatternLayout pattern="%d{HH:mm:ss};%-5p;%m%n"/>
     </Console>
        <!-- fileName : nom du fichier actuel -->  
        <!-- filePattern : nom des fichiers anciens -->
        <RollingFile
            name="liste_fichiers"
            fileName="${log-path}/rapport.log"
            filePattern="${log-path}/rapport_%d{yyyy-MM-dd_HH-mm-ss}.log"
            ignoreExceptions="false"
            >
            <!-- Syntaxe d'une ligne dans le fichier -->
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss};%-5p;%m%n</Pattern>
            </PatternLayout>
           
            <!-- Crée un fichier log4j à chaque démarrage du programme -->
            <Policies>
                <OnStartupTriggeringPolicy />
            </Policies>

            <!-- Ne conserve que les 200 derniers fichiers logs -->
            <DefaultRolloverStrategy>
     <Delete basePath="${log-path}" maxDepth="1">
     <IfFileName glob="rapport_*.log" />
     <IfAccumulatedFileCount exceeds="200" />
     </Delete>
     </DefaultRolloverStrategy>
        </RollingFile> 
           
     </Appenders>
     <Loggers>

     <Root level="info">
     <AppenderRef ref="liste_fichiers"/>
     <AppenderRef ref="sortie_console"/>
     </Root>
     </Loggers>
    </Configuration>

Ensuite, dans le projet, vous pouvez utiliser log.trace, log.debug, log.info, log.warn, log.error dans un tJava afin d'envoyer des instructions à log4J

Utiliser Log4J depuis une routine

Pour utiliser Log4J dans une routine et lui appliquer les mêmes paramètres que précédemment, il faut :

  • Créez la variable statique :
    public static org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger();
  • Validez l'import de la librairie Log4J2

  • Appelez "log.info" avec les paramètres souhaités.

Variantes dans le format des log

Le format des logs dans le fichier est important, voici quelques-unes des variantes possibles :

MotifExemple
%d{yyyy-MM-dd HH:mm:ss};%-5p;%m%n2022-01-08 08:11:07;ERROR;Voici une erreur
%d{yyyy-MM-dd HH:mm:ss.SSSSS} [%-5p] %m%n2022-01-08 08:11:07.00988 [ERROR] Voici une erreur
[%-5p] %d{yyyy-MM-dd HH:mm:ss};%m%n[ERROR] 2022-01-08 08:11:07;Voici une erreur

Configurer les niveaux de logs sur les tLogRow

Le composant tLogRow de Talend utilise System.out.println par défaut. En cochant "Utiliser log4j", la librairie sera utilisée en plus. Voici un code à placer dans un tJava en début de traitement afin de configurer la sortie des tLogRow selon le niveau de Log. Ce code désactivera les tLogRow si le niveau de log est supérieur à INFO.

// Désactive println sur Linux et Windows selon le niveau de log
if (log.getLevel().intLevel()<org.apache.logging.log4j.Level.INFO.intLevel())
    {
    if (System.getProperty("os.name").toLowerCase().indexOf("win")>=0)
        globalMap.put("tLogRow_CONSOLE", new java.io.PrintStream("NUL"));
    else
        globalMap.put("tLogRow_CONSOLE", new java.io.PrintStream("/dev/null"));
    }
Dernière modification le 26/06/2022 - Quillevere.net

Commentaires

Aucune inscription n'est requise si vous souhaitez

Rechercher sur le site

fr en rss RSS info Informations