LOG4J Trace horodatée

De EjnTricks
Révision de 5 novembre 2015 à 15:56 par Etienne (discussion | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Dans le cadre d'un projet pro, il a été demandé d'avoir un fichier de trace dont le nom contient la date et l'heure de démarrage de l'outil. LOG4J 1.2 propose un ensemble d'appender mais à priori aucun où l'on peut indiquer une information contextuelle.

Il a été vu sur des forums que cela pouvait être possible avec la configuration XML, ou par programmation. Mais il serait dommage d'introduire du spécifique dans les programme, surtout si il est souhaité de changer de framework.

Cet article présente une mise en place très simple d'une solution à cette problématique.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Viewer icon.png Objectif

L'objectif est donc de diriger les logs applicatives dans un fichier contenant la date de démarrage, par exemple /var/log/study/myLog-YYYY_MM_DD-HH:mm:ss.


Icon Personnalisation.png Configuration

Dans un premier, le fichier de configuration va être modifié afin d'introduire des références à une variable d'environnement, par exemple date.now, dans un appender de classe org.apache.log4j.FileAppender.

Pour une configuration XML, la définition de l'appender serait la suivante.

    <appender name="MY_APPENDER" class="org.apache.log4j.FileAppender">
        <param name="file" value="/var/log/study/myLog-${date.now}.log" />
        <param name="append" value="true" />
        <param name="encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%-5p][%d{ISO8601}] %m%n"/>
        </layout>
    </appender>

Dans le cadre d'une configuration par fichier texte, la définition serait la suivante.

log4j.appender.MY_APPENDER=org.apache.log4j.FileAppender
log4j.appender.MY_APPENDER.File=/var/log/study/myLog-${date.now}.log
log4j.appender.MY_APPENDER.layout=org.apache.log4j.PatternLayout
log4j.appender.MY_APPENDER.layout.ConversionPattern=%d{ABSOLUTE} %5p [%t] %c - %m%n


Les variables d'environnement peuvent être positionnées dans la ligne de commande Java pour démarrer l'application. Dans le cadre d'un script sh, une variable est positionnée avec la date actuelle formattée, puis envoyée dans la ligne de commande Java.

NOW=`eval date +"%m_%d_%Y-%H_%M_%S"`
java -Ddate.now=${NOW} -cp ... net.jouvinio.study.log4j.MyLogger

net.jouvinio.study.log4j.MyLogger serait la classe de démarrage.


Warning-icon.png Fausse bonne idée

LOG4J propose tout un ensemble d'appender. La fausse bonne idée serait de partir sur un DailyRollingFileAppender car il est possible d'y configurer un pattern de date.

Cependant, l'objectif de cette implémentation est d'effectuer une rotation de la trace, chaque jour. Il ne sera donc pas possible de mettre une information temporelle d'exécution du programme dans le nom du fichier.