IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Logging Java Discussion :

[Log4j] Modification d'un appender depuis code Java


Sujet :

Logging Java

  1. #1
    kij
    kij est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    Par défaut [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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    kij
    kij est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    Par défaut
    En fait j'ai revu mon code, et le nom de mon logger au moment de le récupérer n'était pas bon... bouletisme quand tu nous tiens.

    Bref, mon code est correct et fonctionne très bien. Le résultat est le switch d'un fichier à l'autre selon le comportement de mon code, ce qui est bien souhaité.

    Code épuré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    ...
    Logger loggerTmp		= Logger.getLogger(TMP_LOG_NAME);
    ...
     
    /**
     * getLogger
     * Redirect logger on the correct temporary file and return it
     * @return Logger
     */
    public Logger getLogger (){
    	// --- Modify the appender of logger FTMTMP
    	FileAppender myFApp = (FileAppender) loggerTmp.getAppender(FtmLogger.TMP_APPENDER);
    		myFApp.setFile(getRoot().concat("log/").concat(FtmUtil.LOG_LABEL).concat(".".concat(getCountry())).concat(".txt"));
    	myFApp.activateOptions();
    	return loggerTmp;
    }
    Merci pour le coup de pouce.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Backup d'une BDD depuis code java
    Par zuzuu dans le forum JDBC
    Réponses: 0
    Dernier message: 11/03/2009, 13h02
  2. Génération automatique de fichier xml d'une BDD depuis code java ?
    Par zuzuu dans le forum Persistance des données
    Réponses: 0
    Dernier message: 11/03/2009, 10h09
  3. changer visibility div depuis code java
    Par psycho_xn dans le forum JSF
    Réponses: 10
    Dernier message: 17/09/2008, 01h23
  4. [InitParams] Peut-on y accéder depuis le code java?
    Par ArseNic dans le forum XMLRAD
    Réponses: 2
    Dernier message: 16/05/2007, 16h23
  5. Réponses: 3
    Dernier message: 31/07/2006, 16h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo