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:
Et dans chaque Thread, je modifie la propriété ${monFichier} comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 System.setProperty("monFichier",this.getClass().getName() + ".log"); PropertyConfigurator.configure("resources/log4j.properties");
Merci pour votre aide
Partager