Exemple d’intégration JSF 2 Log4j

Exemple d'intégration JSF 2 + Log4j

jsf log4j logo

Dans ce tutoriel, nous allons vous montrer comment intégrer le framework log4j à l'application web JSF 2.x. JSF utilisejava.util.logging, vous avez besoin de travaux supplémentaires pour rediriger la journalisation desjava.util.logging de JSF verslog4j, avec unpenalty of performance sérieux, assurez-vous d'utiliser cette astuce uniquement pendant le développement local ou environnement de débogage.

Passez en revue l'environnement du projet:

  1. SLF4j 1.7.7

  2. Log4j 1.2.17

  3. JSF 2.2.7

  4. Maven 3

  5. Tomcat 6

  6. Eclipse Kepler 4.3

Étapes pour intégrer JSF et log4j, en bref.

  1. Activez la journalisation JSF surlogging.properties, puisque ce projet s'exécute dans l'environnement Eclipse, lesJRE/lib/logging.properties de l'Eclipse seront utilisés.

  2. Créez unlog4j.properties et placez-le sur le chemin de classe.

  3. Créez un écouteur de servlet, installez lesslf4j bridge handler pour rediriger la journalisation de java.util.logging vers log4j.

Note
Reportez-vous à ceSLF4j Bridging legacy APIs

1. Répertoire des projets

Passez en revue la structure finale du projet.

jsf-log4j-directory

2. Dépendances du projet

Vous avez besoin de slf4j-log4j12 et jul-to-slf4j.

pom.xml

    
        1.7
        2.2.7
        1.7.7
    

    

        
        
            org.slf4j
            jul-to-slf4j
            ${slf4j.version}
        

        
        
            org.slf4j
            slf4j-log4j12
            ${slf4j.version}
        

        
        
            com.sun.faces
            jsf-api
            ${jsf.version}
        
        
            com.sun.faces
            jsf-impl
            ${jsf.version}
        

        
        
            javax.servlet
            servlet-api
            2.5
        

    

4. Journalisation JSF

Étant donné que ce projet s'exécute dans l'environnement d'Eclipse, le JRE d'Eclipse sera utilisé. Ouvrez leslogging.properties, changez le niveau en FINEST et activez la journalisation surjavax.faces etcom.sun.faces:

${JRE_PATH}/lib/logging.properties

# Default is INFO, change it to FINNEST
#java.util.logging.ConsoleHandler.level = INFO

java.util.logging.ConsoleHandler.level = FINEST
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

#Add these two lines to enable JSF logging
javax.faces.level = FINEST
com.sun.faces.level = FINEST

Reportez-vous auxjava.util.logging levels.

Note
Si ce projet est déployé directement sur Tomcat, mettez à jour ce${Tomcat}\conf\logging.properties

5. Log4j Logging

Créez un fichier de propriétés log4j et placez-le dans le dossierresources, reportez-vous à l'étape 1.

log4j.properties

# Root logger option
log4j.rootLogger=WARN, console, file

#enable JSF logging
log4j.logger.javax.faces=DEBUG
log4j.logger.com.sun.faces=DEBUG

# Redirect log messages to console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${catalina.home}/logs/jsfapp.log
log4j.appender.file.MaxFileSize=5KB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

6. ServletContextListener

Créez un écouteur de servlet pour installer le gestionnaire de pont, afin de rediriger la journalisation du JSF dejava.util.properties verslog4j.

MyListener

package com.example.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.slf4j.bridge.SLF4JBridgeHandler;

public class MyListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent arg) {
        System.out.println("contextInitialized....");

        //remove the jsf root logger, avoid duplicated logging
        //try comment out this and see the different on the console
        SLF4JBridgeHandler.removeHandlersForRootLogger();
        SLF4JBridgeHandler.install();
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg) {
        System.out.println("contextDestroyed....");

    }

}

Incluez la classe d'écoute et d'autres paramètres JSF standard.

web.xml



    JavaServerFacesAndLog4j

    
        javax.faces.PROJECT_STAGE
        Development
    
    
        faces/index.xhtml
    

    
    
        
                com.example.listener.MyListener
          
    

    
        Faces Servlet
        javax.faces.webapp.FacesServlet
        1
    
    
        Faces Servlet
        /faces/*
    
    
        Faces Servlet
        *.jsf
    
    
        Faces Servlet
        *.faces
    
    
        Faces Servlet
        *.xhtml
    

7. Journalisation des applications

Un exemple simple pour vous montrer comment effectuer la journalisation de log4j.

WelcomeAction.java

package com.example.controller;

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.apache.log4j.Logger;

@ManagedBean
@SessionScoped
public class PageController implements Serializable {

    private static final long serialVersionUID = 1L;

    private static final Logger logger = Logger.getLogger(PageController.class);

    public String process() {

        // logs debug
        if (logger.isDebugEnabled()) {
            logger.debug("PageController.process()");
        }

        // logs exception
        logger.error("This is Error message", new Exception("Testing"));

        return "success";
    }

}

Une ressource de vue JSF simple.

pages/welcome.jsp






    

JSF 2.0 + Log4j

8. Demo

Exécutez l'application Web JSF, accédez à la page par défaut et cliquez sur le bouton.

jsf-log4j-demo

8.1 Le JSF et la journalisation des applications seront affichés dans la console.

jsf logging in console

Figure: Console Eclipse

8.2 La journalisation JSF et d'application sera enregistrée dans${tomcat}\logs\jsfapp.log.

jsf logging in file

Figure : D:pache-tomcat-6.0.37\logs\jsfapp.log

Télécharger le code source

Téléchargez-le -JSFAndLog4j.zip (12 Ko)