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] reconfiguration pendant l'exécution


Sujet :

Logging Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    SAP BC Admin
    Inscrit en
    Août 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : SAP BC Admin
    Secteur : Finance

    Informations forums :
    Inscription : Août 2004
    Messages : 75
    Par défaut [log4j] reconfiguration pendant l'exécution
    Bonjour,

    j'ai une question concernant Loj4J. J'aimerai pouvoir recharger le fichier de configuration (log4j.xml) pour modifier le comportement du logging sans devoir redémarrer l'application. La configuration se fait actuellement entièrement automatiquement: un fichier log4j dans le classpath et rien dans le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Logger logger = Logger.getLogger(Main.class);
    // ...
    logger.debug("debug info");
    // ...
    logger.info("debug info");
    // ...
    Existe t'il une fonction qui permettre de relire le fichier log4j.xml ?

    Merci

  2. #2
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Pourquoi ne pas utiliser les classes du package java.io du jdk ? après tout ce fichier de configuration de log4j n'est qu'un "simple" fichier xml !


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  3. #3
    Membre confirmé
    Homme Profil pro
    SAP BC Admin
    Inscrit en
    Août 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : SAP BC Admin
    Secteur : Finance

    Informations forums :
    Inscription : Août 2004
    Messages : 75
    Par défaut
    Ce que je dois faire, c'est dire à Log4J de relire son fichier. A la limite, je ne sais même pas si c'est un fichier xml ou properties et où il se trouve...

    Je n'ai pas envie de programmer le logging. Comme j'ai dit, mon code est très limité:
    - getLogger(...)
    - logger.log(...)

    Donc Log4J n'est pas "programmé". J'ai lu dans le tutoriel http://beuss.developpez.com/tutoriel...jakarta/log4j/ qu'il existait une fonction configureAndWatch, mais il est précisé que c'est quand
    vous initialisiez la configuration manuellement (en la programmant)
    Il me faudrait quelque chose du style: logger.reconfigure()

  4. #4
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    je précise que je n'ai jamais utilisé Log4j.
    En fouillant un peu dans la javadoc j'ai trouvé la methode resetConfiguration() de la classe LogManager.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  5. #5
    Membre confirmé
    Homme Profil pro
    SAP BC Admin
    Inscrit en
    Août 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : SAP BC Admin
    Secteur : Finance

    Informations forums :
    Inscription : Août 2004
    Messages : 75
    Par défaut
    Oui, je l'ai aussi trouvé, mais quand je l'utilise, le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    logger.debug("1");
    logger.getLoggerRepository().resetConfiguration();
    logger.debug("2");
    affiche à la console:
    log4j:WARN No appenders could be found for logger (...).
    log4j:WARN Please initialize the log4j system properly.

  6. #6
    Membre confirmé
    Homme Profil pro
    SAP BC Admin
    Inscrit en
    Août 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : SAP BC Admin
    Secteur : Finance

    Informations forums :
    Inscription : Août 2004
    Messages : 75
    Par défaut
    J'ai aussi essaié de refaire un logger ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Logger logger = Logger.getLogger(Main.class);
    // ...
    logger.log(...)
    // reset ...
    logger.getLoggerRepository().resetConfiguration();
    // on redéfini le logger ...
    logger = Logger.getLogger(Main.class);
    logger.log(...)
    mais toujours le même message ...

  7. #7
    Membre confirmé
    Homme Profil pro
    SAP BC Admin
    Inscrit en
    Août 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : SAP BC Admin
    Secteur : Finance

    Informations forums :
    Inscription : Août 2004
    Messages : 75
    Par défaut
    La seule chose que j'ai trouvé (et qui fonctionne), c'est de relire le fichier XML en faisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DOMConfigurator.configure("...../log4j.xml");
    Mais cela suppose que je sache que c'est un fichier xml (et pas log4j.properties) et que je connaisse où il se trouve.

    Il est vrai que je pourrais:
    - scanner le classpath pour retrouver le fichier log4j.properties
    - si pas là, scanner le classpath pour retrouver le fichier log4j.xml
    ...

    mais c'est justement ce que je veux éviter et comme Log4J est capable de le faire (il l'a fait lors du Logger.getLogger() initial), j'aimerais qu'il le refasse quand j'en ai besoin ...

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut
    Dans le cas de l'utilisation d'un fichier properties tu peux utiliser la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PropertyConfigurator.configure("log4j.properties");
    qui fait la même chose que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DOMConfigurator.configure("...../log4j.xml");
    .
    Faut juste penser à rajouter l'import :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import org.apache.log4j.PropertyConfigurator;

  9. #9
    Membre confirmé
    Homme Profil pro
    SAP BC Admin
    Inscrit en
    Août 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : SAP BC Admin
    Secteur : Finance

    Informations forums :
    Inscription : Août 2004
    Messages : 75
    Par défaut
    J'ai essaié, mais exception:
    log4j:ERROR Could not read configuration file [log4j.properties].
    java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified)
    ....
    Par contre, j'ai aussi testé la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DOMConfigurator.configure("log4j.xml");
    , sans préciser le chemin et ... il retrouve bien son fichier.

    Je pense que c'est un début de solution.

    Si on suppose que la config log4j est toujours via le fichier log4j.xml, je n'ai qu'a faire cette commande pour faire le reset de la config.

    J'ai voulu coder
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
    	PropertyConfigurator.configure("log4j.properties");
    } catch (FileNotFoundException e) {
    	DOMConfigurator.configure("log4j.xml");
    }
    mais ne compile pas, l'exception FileNotFoundException n'est jamais lancé par PropertyConfigurator.configure(...) et le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
    	PropertyConfigurator.configure("log4j.properties");
    } catch (Exception e) {
    	DOMConfigurator.configure("log4j.xml");
    }
    compile bien, mais ne passe jamais dans la clause catch.

    Reste alors à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PropertyConfigurator.configure("log4j.properties");
    DOMConfigurator.configure("log4j.xml");
    mais cela me semble pas génial.

  10. #10
    Membre confirmé
    Homme Profil pro
    SAP BC Admin
    Inscrit en
    Août 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : SAP BC Admin
    Secteur : Finance

    Informations forums :
    Inscription : Août 2004
    Messages : 75
    Par défaut
    Je crois que je vais forcer l'usage d'un fichier xml et même peut-être forcer le nom du fichier pour être certain de bien le retrouver.

    J'ajouterai d'office un DOMConfigurator("fichier.xml") au début du programme.

    Merci pour votre aide

  11. #11
    Membre Expert
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Par défaut
    Tu peux utiliser la méthode configureAndWatch pour configurer ton logger, mais il faudra passer le chemin du fichier.

    Sinon pour recharger un fichier de properties :

    http://www.bright-green.com/blog/200...roperties.html

    Bon courage

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/02/2006, 16h08
  2. ça rentre pas dans la boucle pendant l'exécution
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 9
    Dernier message: 15/01/2005, 15h41
  3. Empêcher la copie d'un prog pendant son exécution
    Par JuanLopez1966 dans le forum Assembleur
    Réponses: 3
    Dernier message: 09/09/2004, 19h49
  4. Créer une fonction mathématique pendant l'exécution
    Par zeprogrameur dans le forum Langage
    Réponses: 5
    Dernier message: 09/07/2004, 11h36
  5. Published property d'un compo conservées pendant l'exécution
    Par bobby-b dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/09/2003, 10h15

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