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] le mystère des properties fantômes


Sujet :

Logging Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de eracius
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut [log4j] le mystère des properties fantômes
    Bonjour à tous,

    Alors voilà le mystère en question. Je développe un serveur basé sur Spring/Hibernate et je log avec log4j dans un fichier.

    Je me suis aperçu que lorsque je crée un exécutable de mon application, le fichier de log ne se crée pas alors qu'il n'y pas de problème quand je lance depuis eclipse. J'ai paramétré mon exécutable en mode console et je vois les affichage log dans la console apparaître.

    Après moulte test, j'ai décidé de simplement supprimer le fichier log4j.properties pour voir ce qui se passe. Quand je lance depuis eclipse, résultat normal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    log4j:WARN No appenders could be found for logger (execution.lanceur).
    log4j:WARN Please initialize the log4j system properly.
    Mais quand je crée un exécutable, il continue à logger dans la console au lieu de planter comme il devrait le faire sans .properties pour l'initialiser.

    Devant ce résultat incompréhensible, j'ai décidé de tester sur une autre petite application qui utilise la même base DAO Spring/Hibernate mais avec un code métier différent. Celle-ci se comporte tout à fait normalement, la version exécutable loggant dans le fichier spécifié quand le log4j.properties existe et jamais dans la console si je ne spécifie rien. Cette petite appli utilise exactement les mêmes fichiers de config (ApplicationContext.xml avec juste les services du code métiers qui diffèrent, hibernate.cfg.xml, log4j.properties avec juste un nom de fichier cible diffère ..)

    Dans le doute, j'ai essayé de créer un nouveau projet pour mon serveur en recopiant mes sources et mes fichiers config dedans, même résultat.

    Donc voilà, je voudrais savoir ce qui pourrait amener mon exécutable à configurer log4j en mode console et à ne pas tenir compte du log4j.properties alors que pourtant l'application fonctionne bien quand elle est lancée sous eclipse.

    mon log4j.properties (mis dans le dossier bin):

    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
     
    #définition du niveau et des Appender du rootLogger
    log4j.rootLogger=WARN, monAppender
     
    #définition du Layout pour monAppender
    log4j.appender.monAppender.layout=org.apache.log4j.PatternLayout
     
    #définition du pattern d affichage pour monAppender
    log4j.appender.monAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%c{1}] %m%n
     
    #cible
    log4j.appender.monAppender=org.apache.log4j.RollingFileAppender
    log4j.appender.monAppender.File=C:/log/serveur.log
    log4j.appender.monAppender.Encoding=UTF-8
    log4j.appender.monAppender.MaxFileSize=3000KB
    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    La console est ajoutée par défaut à Log4J.

    Ce que tu fais est l'ajout d'appenders, sans supprimer la console. Pour la supprimer, lis un peu les autres sujets de ce forum, y'en a un qui en parlait y'a pas 10 messages !

  3. #3
    Membre confirmé Avatar de eracius
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut
    Merci pour ta réponse.

    Mais ça ne m'explique pas pourquoi dans un cas, le fait que ma petite appli de test ne trouve pas le fichier log4j.properties l'empèche d'initialiser le log et qu'il mette un message d'erreur et que pour mon serveur il décide comme un grand d'utiliser la console.

    De plus ça ne m'explique pas non plus pourquoi quand mon serveur passe par eclipse il trouve le fichier et pourquoi l'exécutable ne le trouve pas (alors que les deux fonctionnent dans le cas de l'autre application)

    Pour finir, je ne vois pas de discutions qui parle de ce genre de problème (j'ai fouillé le forum pendant 3 bons 1/4 d'heure avant de poster), donc je veux bien que tu me mettes le lien.

  4. #4
    Membre confirmé Avatar de eracius
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut
    Je vais essayer de résumer ça de façon très simple, j'ai toujours un peu tendance à noyer mes problèmes dans trop de phrase.

    Deux applications : Application 1 et Application 2.

    Elles partagent la même base de classes DAO basées sur Spring/Hibernate. Seules leurs classes métier changent.

    Application 1 contient un fichier log4j.properties (voir premier post) lui indiquant de logger dans un fichier C:/log/application1.log.

    • Lorsque je lance Application 1 depuis Eclipse, le fichier de log se crée et est renseigné.
    • Lorsque je crée un exécutable, Application 1 log dans la console.

    Je supprime log4j.properties d'Application 1.

    • Lorsque je lance depuis Eclipse : message d'erreur à l'initilisation du log (voir premier post).
    • Lorsque je crée un .exe : Application 1 log dans la console.

    Maintenant voyons Application 2. Elle possède un fichier de log identique qui lui dit de logger dans C:/log/application2.log.

    • Lorsque je lance Application 2 depuis Eclipse, le fichier de log se crée et est renseigné.
    • Lorsque je crée un exécutable, Application 2 log toujours dans le fichier sans problème.

    Je supprime log4j.properties d'Application 2.

    • Lorsque je lance depuis Eclipse : message d'erreur à l'initilisation du log.
    • Lorsque je crée un .exe : message d'erreur à l'initilisation du log.


    J'espère avoir été très clair, je pense pas pouvoir faire mieux ...

    Si quelqu'un a la moindre idée du pourquoi Application 1 ne semble pas tenir compte du fichier de conf une fois déployée et de où je devrais chercher pour en trouver la cause, je suis preneur.

    Merci d'avance pour votre aide.

  5. #5
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 2
    Par défaut Log4j debug
    Bonjour,

    Positionne cette variable d'env -Dlog4j.debug=true au lancement de ta JVM:
    Sous Eclispe :
    -> Run
    -> Run Configurations
    -> Arguments
    -> VM arguments

    Au lancement de ton jar
    java -Dlog4j.debug=true -jar <Ton JAR>

    Normalement tu devrais obtenir toutes les informations en sortie standard pour comprendre ce qui se passe.

  6. #6
    Membre confirmé Avatar de eracius
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut
    Oula, il me parait bien loin ce post où mon serveur était encore un exécutable ^^

    Merci d'avoir répondu mais je pense que j'ai du résoudre le problème il y a un an et demi En espérant que ça en aide peut être d'autres...

  7. #7
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 2
    Par défaut Spring et son log4j bien a lui...
    Je pense aussi que ce lien peux t'aider à comprendre ce qu'il se passe.

    http://firstpartners.net/kb/index.ph...iguration_File

Discussions similaires

  1. [log4j]nom de fichier properties differents
    Par lanfeustdetroll dans le forum Logging
    Réponses: 2
    Dernier message: 28/09/2007, 09h21
  2. [log4j] Mettre le fichier properties où l'on veut
    Par laurent.c123 dans le forum Logging
    Réponses: 4
    Dernier message: 27/09/2007, 17h35
  3. [JSTL] Insertion des properties
    Par Attila50 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 28/12/2006, 00h11
  4. Réponses: 22
    Dernier message: 14/04/2006, 17h01
  5. initialisation des property page
    Par Robleplongeur dans le forum MFC
    Réponses: 3
    Dernier message: 21/04/2004, 10h47

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