Récupération / Modification d'un Appender
Bonjour,
c'est sûrement une question bête mais je tourne en rond depuis ce matin ...
J'ai un fichier log4j.properties dans le jar de mon appli :
Code:
1 2 3 4 5 6 7
| log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.Append=False
log4j.appender.A1.File=tracePM+.txt
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.layout.ConversionPattern=[%p] %m\n
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.category.com.thales.pmv.ext=DEBUG,A1 |
L'appli reçoit en paramètre un chemin vers un fichier de config de l'appli. Je récupère, entre autre, le chemin à utiliser pour le fichier de log. Je souhaite donc mettre à jour la configuration du Logger. J'avais commencé par betement modifier et recharger le fichier properties. Helas, il est impossible de modifier le fichier dans le jar. Et de toute manière c'est pas vraiment ce que je veux.
J'ai une classe principale qui initialise le Logger (static) par :
Code:
log = Logger.getLogger(this.getClass().getName()+".PMCommon");
Je lis ensuite mon fichier de conf de l'apli et recupère le chemin à utiliser pour le log. J'appelle donc ma méthode updateLogger sensée mettre à jour la configuration du Logger. Hélas c'est ici le pb ...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| private void updateLogger() {
// j'ai essayé ça pour voir mais ça ne change rien
// PropertyConfigurator.configure("/log4j.properties");
Enumeration enumeration =log.getAllAppenders();
if(enumeration.hasMoreElements()){
// je n'arrive jamais ici !!!!
FileAppender monAppender = (FileAppender)enumeration.nextElement();
String fileName = monAppender.getFile();
cheminLog = (cheminLog == null) ? fileName : cheminLog+"\\"+fileName;
monAppender.setFile(cheminLog);
}
} |
Est ce que je fais n'importe quoi ? :?
Je comprends pas, je n'arrive pas à récupérer les Appenders ...
Une idée serait la bienvenue ;) ... merci d'avance
[EDIT] En fait je pensais à un autre truc ... est-il possible (enfin j'arrive pas à trouver exactement comment) de définir mon chemin comme une propriété système et d'utiliser cette propriété dans le fichier properties ...
[log4j]Modification "dynamique" du chemin pour le fichier de log
Bon en fait mon idée dans le EDIT fonctionne.
Au cas où ça serve :
dans mon fichier log4j.properties :
Code:
log4j.appender.A1.File=${pathToLog}\\tracePM+.txt
Ensuite quand je lis mon fichier de conf, je mets à jour la variable système pathToLog ... et je n'initilise mon logger qu'après. Ca marche nickel, pas besoin de se casser la tête ...
[EDIT] je ne sais pas si changer le titre va aider pour la recherche mais bon ...
Définir dynamiquement le chemin vers les logs
Citation:
Envoyé par
Péchereau
comment faire pour que le fichier de propriétés prenne en compte la variable système "pathToLog" ?
en fait dans le code Java qui précède l'initialisation de mon Logger je fais :
Code:
1 2 3
|
String cheminLog = "un fichier ..."
System.setProperty("pathToLog", cheminLog); |
et au moment où le logger lit sa configuration, la variable est bien initialisée et la valeur est prise en compte ...