JSF 2 + Log4j-Integrationsbeispiel

JSF 2 + Log4j-Integrationsbeispiel

jsf log4j logo

In diesem Tutorial zeigen wir Ihnen, wie Sie das log4j-Framework in die JSF 2.x-Webanwendung integrieren. JSF verwendetjava.util.logging. Sie benötigen zusätzliche Arbeiten, um die Protokollierung vonjava.util.logging von JSF nachlog4j umzuleiten. Stellen Sie mit ernsthaftenpenalty of performance sicher, dass Sie diesen Trick nur während der lokalen Entwicklung oder verwenden Debugging-Umgebung.

Überprüfen Sie die Projektumgebung:

  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

Schritte zur Integration von JSF und log4j, kurz gesagt.

  1. Aktivieren Sie die JSF-Protokollierung fürlogging.properties. Da dieses Projekt in der Eclipse-Umgebung ausgeführt wird, werden dieJRE/lib/logging.properties der Eclipse verwendet.

  2. Erstellen Sie einlog4j.properties und fügen Sie es in den Klassenpfad ein.

  3. Erstellen Sie den Listener eines Servlets und installieren Sieslf4j bridge handler, um die Protokollierung von java.util.logging nach log4j umzuleiten.

1. Projektverzeichnis

Überprüfen Sie die endgültige Projektstruktur.

jsf-log4j-directory

2. Projektabhängigkeiten

Sie benötigen slf4j-log4j12 und 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. JSF-Protokollierung

Da dieses Projekt in der Eclipse-Umgebung ausgeführt wird, wird die JRE der Eclipse verwendet. Öffnen Sie dielogging.properties, ändern Sie die Stufe auf FINEST und aktivieren Sie die Protokollierung fürjavax.faces undcom.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

Note
Wenn dieses Projekt direkt auf Tomcat bereitgestellt wird, aktualisieren Sie dieses${Tomcat}\conf\logging.properties

5. Log4j-Protokollierung

Erstellen Sie eine log4j-Eigenschaftendatei und legen Sie sie im Ordnerresourcesab (siehe Schritt 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

Erstellen Sie einen Servlet-Listener, um den Bridge-Handler zu installieren und die JSF-Protokollierung vonjava.util.properties auflog4j umzuleiten.

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....");

    }

}

Schließen Sie die Listener-Klasse und andere Standard-JSF-Einstellungen ein.

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. Anwendungsprotokollierung

Ein einfaches Beispiel, das Ihnen zeigt, wie Sie die Protokollierung von log4j durchführen.

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";
    }

}

Eine einfache JSF-View-Ressource.

pages/welcome.jsp






    

JSF 2.0 + Log4j

8. Demo

Führen Sie die JSF-Webanwendung aus, rufen Sie die Standardseite auf und klicken Sie auf die Schaltfläche.

jsf-log4j-demo

8.1 Sowohl die JSF- als auch die Anwendungsprotokollierung werden in der Konsole angezeigt.

jsf logging in console

Abbildung: Eclipse-Konsole

8.2 Sowohl die JSF- als auch die Anwendungsprotokollierung werden in${tomcat}\logs\jsfapp.log protokolliert.

jsf logging in file

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

Quellcode herunterladen

Laden Sie es herunter -JSFAndLog4j.zip (12 KB)