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

Servlets/JSP Java Discussion :

webapp avec log4j


Sujet :

Servlets/JSP Java

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Par défaut webapp avec log4j
    Salut,

    j'en suis a la decouverte de log4j. J'essaye de faire une pt webapp utilisant web4j mais je n'arrive pas a charger le fichier de config.
    voici comment est structuré ma webapp:
    index.jsp
    WEB-INF/lib/log4j-1.2.13.jar
    WEB-INF/classes/log4j.properties

    et voila le code de ma jsp :

    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
     
    <%@page contentType="text/html"
            import = "org.apache.log4j.*,java.util.Properties,java.io.FileInputStream,java.io.IOException"
    %>
     
    <html>
    TEST LOG4J
     
    <%
        Logger log = Logger.getLogger("index.jsp");
     
        Properties logProperties = new Properties();
        String propFile= "/log4j.properties";
     
        try
        {
          logProperties.load(new FileInputStream(propFile));
          PropertyConfigurator.configure(logProperties);
        }
        catch(IOException e)
        {
          throw new RuntimeException("Unable to load logging property " + propFile);
        }
     
            Level level = log.getLevel();
     
            if(log.getLevel() == null) {
                System.out.println("level is null - not initialized... set it to FATAL");
                log.setLevel(Level.FATAL);
            }
      
            log.info("Starting up... info");
            log.error("Starting up... error");
            
            log.setLevel(Level.DEBUG);
     
            log.info("Starting up... info2");
            log.error("Starting up... error2");
        
    %>
    </html>
    je n'arrete pas de me ramasser des exceptions disant que le fichier de config n'est pas accessible.
    Est ce que qqun pourrait me dire ou je dois le mettre pour pouvoir le charger correctement?

    merci d'avance.

  2. #2
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        String path = this.getServletContext().getRealPath("/")+"WEB-INF/classes";
        String propFile = path+"/log4j.properties";
        PropertyConfigurator.configure(propFile);

  3. #3
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Mais le plus propre est de créer une servlet d'initialisation de Log4j par exemple comme ceci :
    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
     
    public class Log4jInit extends HttpServlet
    {
      public void init()
      {
        String path= getServletContext().getRealPath("/")+"WEB-INF/classes";
        String propFile = path+"/log4j.properties";
        PropertyConfigurator.configure(propFile );
      }
      public void doGet(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException
      {
            super.doGet(request, response);
      }
    }
    qui est exécutée au lancement de l'application.

    Il suffit de la définir dans le web.xml comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <servlet>
        	<servlet-name>Log4jInit</servlet-name>
        	<servlet-class>unPackage.Log4jInit</servlet-class>
        	<load-on-startup>1</load-on-startup>
    </servlet>

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Par défaut
    ok merci. avec ca le fichier est trouvé. par contre il n'est pas pris en compte.
    je m'explique :

    a la suite de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    logProperties.load(new FileInputStream(propFile));
    PropertyConfigurator.configure(logProperties);
    je teste si le niveau de log a deja ete selectionné. hors il ne l'est pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            if(log.getLevel() == null) {
                System.out.println("level is null - not initialized... set it to FATAL");
                log.setLevel(Level.FATAL);
            }
    et voici le contenu de mon fichier de config dans lequel je precise justement le niveau de log:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    log4j.rootCategory=WARN, dest1
    log4j.appender.dest1=org.apache.log4j.ConsoleAppender
    log4j.appender.dest1.layout=org.apache.log4j.PatternLayout
    qu'en penses tu?

  5. #5
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Je ne sais pas pourquoi il te retourne null mais as-tu vérifié ce que donne le log.info et le log.error sans positionner le level à FATAL, pour voir si le WARN codé dans log4j.properties est pris en compte ?

    soit en codant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            Level level = log.getLevel();
     
            log.info("Starting up... info");
            log.error("Starting up... error");
    si le WARN est pris en compte, tu ne devrais voir que "Starting up... error".
    Est-ce le cas ?

    Sinon, as-tu vu mon message précédent concernant la servlet d'initialisation ?

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Par défaut
    bien que (log.getLevel() == null) soit vrai, le niveau de log est quand meme bien positionné. comprends pas trop mais bon ca marche
    le pb est que je ne peux pas tester le niveau de log avec un getLevel()...

    sinon oui j'avais bien vu ton message concernant la servlet. d'ailleurs j'ai deja créé une servlet pour l'initialisation du logger. concernant les servlets justement, où me conseilles tu de placer le Logger log = Logger.getLogger("index.jsp"); ? dans ma servlet d'initialisation ou un dans chacune des jsp et servlets?

    encore une pt chose. y'a t il un moyen de changer le niveau de log a chaud sans faire un redeployement? j'ai bien essayé d'aller modifier directement le fichier de config dans mon appli déployé mais les modifs ne sont pas relus par la servlet

  7. #7
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Citation Envoyé par benkunz
    sinon oui j'avais bien vu ton message concernant la servlet. d'ailleurs j'ai deja créé une servlet pour l'initialisation du logger. concernant les servlets justement, où me conseilles tu de placer le Logger log = Logger.getLogger("index.jsp"); ? dans ma servlet d'initialisation ou un dans chacune des jsp et servlets?
    dans chacune des servlets (ou jsp si tu préfères mettre du code java dans les jsp).
    Citation Envoyé par benkunz
    encore une pt chose. y'a t il un moyen de changer le niveau de log a chaud sans faire un redeployement? j'ai bien essayé d'aller modifier directement le fichier de config dans mon appli déployé mais les modifs ne sont pas relus par la servlet
    dans ce cas, il faut sortir le fichier log4j.properties de la webapp.

  8. #8
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Par défaut
    sortir le fichier de config? et tu le mets ou? et comment tu le charges ensuite?

  9. #9
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Moi, je procède ainsi :

    Je mets le fichier log4j.properties dans un répertoire, par exemple C:\Ressources\monAppli.

    Je code ceci dans la variable d'environnement JAVA_OPTS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -DRessources="C:\Ressources\monAppli"
    Ressources est un exemple, tu peux donner n'importe quel nom à ta variable. Il faut par contre obligatoirement la préfixer par -D.

    Et dans la servlet d'initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        String path= System.getProperty("Ressources") ;
        String propFile = path+"/log4j.properties";
        PropertyConfigurator.configure(propFile );

  10. #10
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Par défaut
    super ca marche au poil.

    merci beaucoup

  11. #11
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    De rien.

+ 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. [Question idiote] path de ma webapp avec Struts
    Par TSalm dans le forum Struts 1
    Réponses: 2
    Dernier message: 28/02/2007, 14h37
  3. [Security] Sécurisation d'une webapp avec JSF
    Par pippou dans le forum Spring
    Réponses: 1
    Dernier message: 04/08/2006, 14h53
  4. [Servlet] Effectuer des traces avec log4j
    Par Shiryu44 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 04/04/2005, 16h43
  5. [log4j] traçage de webapps avec log4j
    Par skaboss dans le forum Logging
    Réponses: 6
    Dernier message: 10/01/2005, 13h15

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