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

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2011
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 109
    Points : 32
    Points
    32
    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 sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

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

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2011
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 109
    Points : 32
    Points
    32
    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 sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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
    Nouveau membre du Club
    Inscrit en
    Août 2011
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 109
    Points : 32
    Points
    32
    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 sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2011
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 109
    Points : 32
    Points
    32
    Par défaut
    Concernant le fait que l'utilisateur (notre service exploit) uisse modifier le fichier. En effet, mais il faut tout de même que je livre un fichier "correct"

    Mon idée est donc peut être de laisser dan le fichier source un fichier log4j.xml reconnu automatiquement par tomcat.
    Les logs iront donc dans catalina.home/logs/dmist.log

    et de crée un autre fichier log4j (exemple log4j_java.xml) dans lequel les log iront uniquement dans system.out.

    lors du shell appelant le java, je pourrais utiliser (si ca marche) la commande :
    -Dlog4j.configuration={path to file}

    Il suffit alors dans le shell de rediriger les sorties vers le fichier voulu...

    Qu'en pensez vous?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    et en qui c'est un problème pour toi, dans la version standalone, de packager un log4j.xml différent de celui du war??

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2011
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 109
    Points : 32
    Points
    32
    Par défaut
    Si la question est pourquoi je veux mettre deux log4j.xml?

    Ma réponse :
    Dans le log4j.xml, je configurer un log qui se trouve dans le dossier des logs de tomcat.

    Lors de l'exécution du programme java, je ne veux pas utiliser ce paramétrage vers les logs de tomcat, mais vers un autre fichier de log.
    C'est pour cela que je comptais utiliser deux fichiers log4j.
    Ça a l'air de fonctionner pour le moment sous windows avec la commande suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -Dlog4j.configuration=log4j_java.xml -classpath "%DMIST_WEB_INF%\src\java;%DMIST_WEB_INF%\lib\asm-3.1.jar;%DMIST_WEB_INF%\lib\asm-commons-3.1.jar;%DMIST_WEB_INF%\lib\asm-tree-3.1.jar;%DMIST_WEB_INF%\lib\commons-beanutils-1.7.0.jar;%DMIST_WEB_INF%\lib\commons-chain-1.2.jar;%DMIST_WEB_INF%\lib\commons-collections-3.1.jar;%DMIST_WEB_INF%\lib\commons-digester-2.0.jar;%DMIST_WEB_INF%\lib\commons-fileupload-1.2.2.jar;%DMIST_WEB_INF%\lib\commons-io-2.0.1.jar;%DMIST_WEB_INF%\lib\commons-lang-2.5.jar;%DMIST_WEB_INF%\lib\commons-logging-1.1.1.jar;%DMIST_WEB_INF%\lib\commons-validator-1.3.1.jar;%DMIST_WEB_INF%\lib\freemarker-2.3.16.jar;%DMIST_WEB_INF%\lib\itextpdf-5.4.0.jar;%DMIST_WEB_INF%\lib\javassist-3.11.0.GA.jar;%DMIST_WEB_INF%\lib\jstl-1.1.jar;%DMIST_WEB_INF%\lib\log4j-1.2.17.jar;%DMIST_WEB_INF%\lib\ognl-3.0.1.jar;%DMIST_WEB_INF%\lib\poi-3.9-20121203.jar;%DMIST_WEB_INF%\lib\standard.jar;%DMIST_WEB_INF%\lib\struts2-core-2.2.3.jar;%DMIST_WEB_INF%\lib\struts2-jquery-plugin-3.1.1.jar;%DMIST_WEB_INF%\lib\xwork-core-2.2.3.jar;%TOMCAT_LIB%\ojdbc6.jar" dmist.InsertionBaseActiviteGTA %DMIST_URL% %DMIST_USER% %DMIST_PSW% %DMIST_MOIS% %DMIST_ANNEE% %DMIST_SIMU_REEL%
    Sous linux, je ne confirme pas pour le moment que cela fonctionne car la commande ci-dessus (adaptée) ne fonctionne pas pour le moment. Surement car elle fait plus de 256 caractères. Je cherche donc comment mettre un long classpath....

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut

    Sous linux, je ne confirme pas pour le moment que cela fonctionne car la commande ci-dessus (adaptée) ne fonctionne pas pour le moment. Surement car elle fait plus de 256 caractères. Je cherche donc comment mettre un long classpath....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $(( $(getconf ARG_MAX) - $(env | wc -c) ))
    Et tu verra que la limite est plus proche de 100.000 caractères que de 256

  11. #11
    Nouveau membre du Club
    Inscrit en
    Août 2011
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 109
    Points : 32
    Points
    32
    Par défaut
    Suite à notre discution :

    Je confirme que mes logs fonctionne depuis tomcat et depuis "java" en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -Dlog4j.configuration=log4j_java.xml ....
    le fichier xml etant dans le classpath

    mon probleme est donc résolu

+ 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