LOG4J Trace horodatée
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.
Votre avis
Nobody voted on this yet
|
|
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
.
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
Où net.jouvinio.study.log4j.MyLogger
serait la classe de démarrage.
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.