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
    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 : 45
    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 : 45
    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 : 45
    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.

  7. #7
    Invité
    Invité(e)
    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
    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 : 45
    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
    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
    Invité
    Invité(e)
    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
    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 : 45
    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

    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
    Invité
    Invité(e)
    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