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] traçage de webapps avec log4j


Sujet :

Logging Java

  1. #1
    Candidat au Club
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [log4j] traçage de webapps avec log4j
    Bonjour,

    log4j me pose un problème dont la solution est sans doute très simple, mais que je ne parviens pas à résoudre :
    J'ai une web-app qui tourne sous Tomcat. Je voudrais simplement la tracer avec log4j.
    Mon problème est que je voudrais un niveau de trace différent pour ma web-app et pour Tomcat.
    J'ai donc placé dans{TOMCAT_HOME}/common/classes/log4j.properties les confs suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    log4j.rootLogger=ERROR, A1
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
    dans {MAWEBAPP_HOME}/WEB-INF/classes/log4j.properties, j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    log4j.rootLogger=DEBUG, A1, logfile
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
    log4j.appender.logfile=org.apache.log4j.RollingFileAppender
    log4j.appender.logfile.File=c:/logs/mywebapp.log
    log4j.appender.logfile.MaxFileSize=512KB
    Dans ma webapp, j'utilise pour chaque classe que je veux logger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    static Logger logger = Logger.getLogger(MaClasse.class)
    logger.debug("ceci est une trace")
    Et là, c'est le drame, car sur la console mes pauvres traces sont submergées par un flot continu de traces générées par Tomcat, qui prend le niveau de trace de ma webapp(debug), au lieu de conserver sagement le sien(error).

    Merci par avance pour toute aide 8)

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Début de réponse... ?
    Salut,

    Pour ma part, dans un coin de ma Servlet (à l'init), je spécifie le nom du fichier log4j à utiliser.... comme ceci :

    ...
    import org.apache.log4j.*;
    ....
    PropertyConfigurator.configure ("C:\eclipse\workspace\V2\log4j.properties");

    Si ça peux t'aider....
    Hugo.

  3. #3
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Le mieux est de spécifier un Logger pour ton arborescence de packages.
    Ainsi, tu peux laisser Tomcat en mode ERROR et mettre ton/tes logger(s) en mode INFO par exemple.
    Pour cela, il faut que dans tes classes tu récupères un logger avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static Logger logger = Logger.getLogger([b]<nom classe>[/b].class.getName());
    Dans ton fichier de log, tu mets des lignes comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    log4j.logger.<nom classe>=INFO
    Sinon regardes la doc de log4j dont je met ci-après un extrait :

    Initialization servlet

    It is also possible to use a special servlet for log4j initialization. Here is an example,

    package com.foo;

    import org.apache.log4j.PropertyConfigurator;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.PrintWriter;
    import java.io.IOException;

    public class Log4jInit extends HttpServlet {

    public
    void init() {
    String prefix = getServletContext().getRealPath("/");
    String file = getInitParameter("log4j-init-file");
    // if the log4j-init-file is not set, then no point in trying
    if(file != null) {
    PropertyConfigurator.configure(prefix+file);
    }
    }

    public
    void doGet(HttpServletRequest req, HttpServletResponse res) {
    }
    }




    Define the following servlet in the web.xml file for your web-application.

    <servlet>
    <servlet-name>log4j-init</servlet-name>
    <servlet-class>com.foo.Log4jInit</servlet-class>

    <init-param>
    <param-name>log4j-init-file</param-name>
    <param-value>WEB-INF/classes/log4j.lcf</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
    </servlet>




    Writing an initialization servlet is the most flexible way for initializing log4j. There are no constraints on the code you can place in the init() method of the servlet.

  4. #4
    Candidat au Club
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci à tous les deux, je vais essayer
    Toutefois, je suis assez perplexe....
    Je ne vois pas pourquoi dès lors définir un log4j.properties dans Tomcat + un autre dans chaque dossier /WEB-INF/classes des différentes applis web
    Je vais mettre en application vos conseils, et posterai mes résultats.

    Encore merci et bon réveillon

  5. #5
    Candidat au Club
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'ai donc testé ta méthode, ego, et effectivement ça fonctionne parfaitement. Merci beaucoup pour cette solution qui va enfin me permettre de retrouver la sérénité avec log4j.
    Toutefois, n'existe-t-il pas un moyen de spécifier dans le log4j.properties
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    log4j.logger.<nom classe>=INFO
    un nom de package plutot qu'un nom de classe, ce qui serait moins fastidieux à l'usage ?

  6. #6
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    en fait, tu peux mettre un nom de package dans le .properties

  7. #7
    Candidat au Club
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [résolu]
    Merci 1000 fois, ego !
    Grâce à tes conseils, je suis durablement réconcilié avec log4 !
    Ca fonctionne effectivement très bien avec le nom de package.

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

Discussions similaires

  1. Pb de journalisation avec Log4j...
    Par cofy dans le forum Logging
    Réponses: 5
    Dernier message: 10/03/2008, 12h21
  2. Weblogic 8.1 avec log4j
    Par lili2704 dans le forum Weblogic
    Réponses: 2
    Dernier message: 12/03/2007, 18h31
  3. webapp avec log4j
    Par benkunz dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 01/09/2006, 15h42
  4. Réponses: 2
    Dernier message: 03/05/2006, 13h46
  5. [Servlet] Effectuer des traces avec log4j
    Par Shiryu44 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 04/04/2005, 16h43

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