Un fichier de log par thread avec Log4j et log4j.properties
Bonjour,
J'ai une application qui est multithread(8 ethreads). Au début je loggais tous les résultats des 8 threads dans un seul fichier. Mais l'ordre des informations présentes dans le fichier de *.log ne me convient pas. Chaque thread écrit quand bon lui semble et les infos des diverses threads sont un peu partout dans le fichier *.log. Pas forcément les unes à la suite des autres (A cause de la préemption je pense). Alors, j'ai voulu que chaque thread crée son propre fichier de log et y stocke ses informations. Pour cela j'ai configuré le fichier log4j.properties comme ceci:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
log4j.rootLogger=INFO,stdout,fout
log4j.logger1=,stdout,fout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d{ABSOLUTE} [%-5p] %m%n
log4j.appender.fout=org.apache.log4j.FileAppender
log4j.appender.fout.Append=false
log4j.appender.fout.File=${monFichier}
log4j.appender.fout.layout=org.apache.log4j.PatternLayout
log4j.appender.fout.layout.ConversionPattern=%d{ABSOLUTE} [%-8t] [%-5p] %m%n |
Et dans chaque Thread, je modifie la propriété ${monFichier} comme ceci:
Code:
1 2 3
|
System.setProperty("monFichier",this.getClass().getName() + ".log");
PropertyConfigurator.configure("resources/log4j.properties"); |
Je n'obtiens pas le résultat souhaité. Tous les fichiers de log de chaque Thread sont bien créés. Mais il n'y a qu'un seul fichier qui correspond au dernier thread lancé qui est rempli. A croire que les loggers de chaque thread s'appuient systématiquement sur l'état courant du fichier "log4j.properties". Et comme sa propriété ${monFichier} est modifiée par la dernière thread, son état courant indique donc que le fichier de sortie est celui de la dernière thread.
Merci pour votre aide