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 :

log commum tomcat et java "hors tomcat"


Sujet :

Logging Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut log commum tomcat et java "hors tomcat"
    Bonjour.

    Je suis confronté à un problème que je ne sais pas résoudre.

    J'ai une application tomcat sur laquelle j'ai configuré log4j :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
     
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
      <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
        <param name="Target" value="System.out"/> 
        <layout class="org.apache.log4j.PatternLayout"> 
          <param name="ConversionPattern" value="%d %-5p %c - %m%n"/> 
        </layout> 
      </appender> 
      <appender name="fileAppender" class="org.apache.log4j.FileAppender"> 
        <param name="file" value="${catalina.home}/logs/dmist.log"/> 
        <layout class="org.apache.log4j.PatternLayout"> 
          <param name="ConversionPattern" value="%d %-5p %c - %m%n"/> 
        </layout> 
      </appender> 
     
    	<logger name="org.apache.struts2.util.TextProviderHelper">
          <level value="ERROR"/>
       </logger>
     
     
       <logger name="com.opensymphony.xwork2.ActionSupport">
          <level value="INFO"/>
       </logger>
     
       <logger name="dmist" >
          <level value="INFO"/> <!-- Passer en mode DEBUG pour activer le debug des classes DMIST* -->
       </logger>
        <logger name="dmist.dao.services.GestionConnexion" >
          <level value="INFO"/>
       </logger>
       <logger name="dmist.util.SessionCheckInterceptor" >
          <level value="INFO"/>
       </logger>
     
      <root> 
        <priority value ="INFO" /> 
        <appender-ref ref="console" />
        <appender-ref ref="fileAppender" /> 
      </root>
     
    </log4j:configuration>
    Les logs fonctionne très bien.


    Je dois aussi utiliser un programme java avec un "main" qui utilise exactement les mêmes classes.

    Lorsque je lance ma commande :
    [CODE]java -classpath "...." dmist.InsertionBaseActiviteGTA[/ :
    CODE]
    j'ai l'erreur suivante (uniquement sous linux, pas sur windows)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    log4j:ERROR setFile(null,true) call failed.
    java.io.FileNotFoundException: /logs/dmist.log (No such file or directory)
            at java.io.FileOutputStream.openAppend(Native Method)
            at java.io.FileOutputStream.<init>(FileOutputStream.java:177)
            at java.io.FileOutputStream.<init>(FileOutputStream.java:102)
            at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
            at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
            at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)

    Y-a-t-il un moyen que les erreurs n'apparaissent pas ou de modifier le paramètre de log4j uniquement lors du lancement de ce programme.

    Si vous avez une idée je suis preneur.
    Merci d'avance.
    Johann

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    On peux voir le code avec lequel tu initialise log4j? Visiblement le chemin dedans est mal codé.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Dans chaque classe qui fait des log, je fais un :

    log = Logger.getLogger(MyClass.class);

    Lors de l'exécution avec tomcat, le log se met bien dans ${catalina.home}/logs/dmist.log comme configuré sur l'appender du fichier log4j.xml se trouvant dans le dossier des sources.
    Je l'avais configuré ainsi afin d'être indépendant du tomcat (mon poste, le serveur de dev ou de prod...)

    Par contre, depuis l'exécution depuis le main, on voit l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    log4j:ERROR setFile(null,true) call failed.java.io.FileNotFoundException: /logs/dmist.log
    .
    Je suppose donc que c'est que le java "avec main" ne connais pas ${catalina.home}, ce qui me parraitrait normal.

    Mes besoins de logs était au niveau de tomcat, mais depuis le "main", je n'en ai pas trop besoin.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Dans ton main, avant d'appeler le moindre logger, faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.getProperties.put("catalina.home","/tmp")
    par exemple

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci, mais y-aurait-il une possibilité de faire cela de façon externe au code java?
    -Dcatalina.home=/path/to/folder ?

    En effet, je ne peux pas me permettre de code en fonction de la machine qui va accueillir l'application. (je ne maitrise pas obligatoirement l'architecture de dossier des serveurs).

    De plus, sauriez vous pourquoi je n'ai l'erreur que sous linux?
    En effet sous windows, j'ai les logs directement sur la console, et je n'ai pas l'erreur sur le dossier manquant.


    De plus, y a-t-il un moyen d'avoir un config log4j pour tomcat (exemple : celle que j'ai montrée dans mon premier message), et une autre lors de l'exécution du main? (exemple pour être dans un autre fichier de log)

    Merci d'avance.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par johannsan Voir le message
    Merci, mais y-aurait-il une possibilité de faire cela de façon externe au code java?
    -Dcatalina.home=/path/to/folder ?
    Comme ça oui. Enfin le plus propre serait quand même de laisser l'utilisateur éditer le fichier log4j à sa sauce
    Citation Envoyé par johannsan Voir le message
    De plus, sauriez vous pourquoi je n'ai l'erreur que sous linux?
    Sous linux, seul root peux écrire à la racine (et donc créer /log). Sous windows ce n'est pas le cas.

    De plus, y a-t-il un moyen d'avoir un config log4j pour tomcat (exemple : celle que j'ai montrée dans mon premier message), et une autre lors de l'exécution du main? (exemple pour être dans un autre fichier de log)
    Tu peux utiliser PropertyConfigurator/DOMConfigurator pour préciser quel fichier de config à prendre.

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

Discussions similaires

  1. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 10h41
  2. Configuration de Tomcat avec JAVA
    Par oussam dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 01/03/2006, 21h33
  3. [Plugin][MyEclipse]Probleme MyEclipse,Tomcat et java 1.5
    Par dguenard dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 13/06/2005, 12h15

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