[Log4j] Modification d'un appender depuis code Java
Bonjour,
J'ai fais quelques recherches infructueuses sur ce forum quand à savoir de quelle manière on peut modifier un Appender Log4j (ainsi qu'en récupérer un) à l'intérieur d'un code Java ?
Mon but est de modifier le fichier de sortie d'un appender de manière à utiliser le même Logger dans mon code, mais qui écrit sur différents fichiers en sortie selon le comportement de mon code.
En gros je ne peux pas configurer différents Loggers à l'avance dans un fichier de configuration, d'où cette demande.
Pour ce que j'en ai déjà fait, voici comment j'ai procédé:
1 - mise en place d'un fichier de properties que je load au début de mon programme pour que différents Logger Log4j soient opérationnels.
2 - Récupération d'un Appender défini dans mon fichier de properties et tentative de le modifier
Cette deuxième phase coince.
Voici le code Java sur lequel je suis parti pour tenter la chose, où 'FtmLogger.TMP_LOG_NAME' est le nom de mon Logger et 'FtmLogger.TMP_APPENDER' le nom de l'appender (voir valeur dans fichier de configuration ci-dessous), tout deux définis dans le fichier log4j de configuration:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
public Logger getLogger (){
// --- Modify the appender of logger FTMTMP
Appender myAppender = Logger.getLogger(FtmLogger.TMP_LOG_NAME).getAppender(FtmLogger.TMP_APPENDER);
Enumeration myEnum = Logger.getLogger(FtmLogger.TMP_LOG_NAME).getAllAppenders();
System.out.println("ENUM SIZE = "+myEnum.hasMoreElements());
while ( myEnum.hasMoreElements() ){
Object myApp = myEnum.nextElement();
System.out.println("Class app = "+myApp.getClass().getName());
}
FileAppender myFApp = (FileAppender) myAppender;
if ( myAppender == null ){
System.out.println("myAppender NULL");
}
myFApp.setFile(getRoot().concat("log/").concat(FtmUtil.LOG_LABEL).concat(".".concat(getCountry())).concat(".txt"));
myFApp.activateOptions();
return Logger.getLogger(FtmLogger.TMP_LOG_NAME);
} |
Le code en gras est mon code d'origine. Le reste c'est des traces que j'ai afficher pour comprendre qu'est ce qui ne fonctionnait pas. Il en ressort que je ne récupère aucun appender depuis mon objet Logger récupéré.
ps: mon fichier de properties Log4j (pour la partie concernant le logger en question):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
#### Use two appenders, one to log to console, another to log to a file
log4j.rootCategory=OFF
...
log4j.logger.bidule.ftm.temporary=WARN, FTMTMP
#### First appender writes to console STDOUT
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d - %F@%m%n
#### Third appender writes into file
log4j.appender.FTMTMP=org.apache.log4j.RollingFileAppender
log4j.appender.FTMTMP.File=log/FTMTMP_NOCC.txt
log4j.appender.FTMTMP.Append=false
log4j.appender.FTMTMP.MaxFileSize=25MB
log4j.appender.FTMTMP.MaxBackupIndex=10
log4j.appender.FTMTMP.layout=org.apache.log4j.PatternLayout |
Je suis ouvert à toute remarque, que ce soit des modifications de ma piste actuelle ou de nouvelles pistes.
En vous remerciant par avance pour votre aide.
Cordialement.