Пример интеграции JSF 2 Log4j

Пример интеграции JSF 2 + Log4j

jsf log4j logo

В этом руководстве мы покажем вам, как интегрировать каркас log4j с веб-приложением JSF 2.x. JSF используетjava.util.logging, вам нужны дополнительные работы, чтобы перенаправить ведение журнала из JSFjava.util.logging наlog4j, с серьезнымpenalty of performance, убедитесь, что используйте этот трюк только во время локальной разработки или среда отладки.

Проверьте среду проекта:

  1. SLF4j 1.7.7

  2. Log4j 1.2.17

  3. JSF 2.2.7

  4. Maven 3

  5. Tomcat 6

  6. Затмение Кеплер 4.3

Короче, шаги по интеграции JSF и log4j.

  1. Включите ведение журнала JSF наlogging.properties, поскольку этот проект выполняется в среде Eclipse, будет использоватьсяJRE/lib/logging.properties Eclipse.

  2. Создайтеlog4j.properties и поместите его в путь класса.

  3. Создайте прослушиватель сервлета, установитеslf4j bridge handler, чтобы перенаправить ведение журнала с java.util.logging на log4j.

Note
Обратитесь к этомуSLF4j Bridging legacy APIs

1. Каталог проектов

Просмотрите окончательную структуру проекта.

jsf-log4j-directory

2. Зависимости проекта

Вам нужны slf4j-log4j12 и 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 Logging

Поскольку этот проект выполняется в среде Eclipse, будет использоваться JRE Eclipse. Откройтеlogging.properties, измените уровень на FINEST и включите ведение журналаjavax.faces иcom.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

Обратитесь кjava.util.logging levels.

Note
Если этот проект развернут на Tomcat напрямую, обновите этот${Tomcat}\conf\logging.properties

5. Log4j Logging

Создайте файл свойств log4j и поместите его в папкуresources, см. Шаг №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. контекста сервлета

Создайте прослушиватель сервлета для установки обработчика моста, чтобы перенаправить ведение журнала JSF сjava.util.properties наlog4j.

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

    }

}

Включите класс слушателя и другие стандартные настройки JSF.

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. Регистрация приложений

Простой пример, чтобы показать вам, как вести 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";
    }

}

Простой ресурс просмотра JSF.

pages/welcome.jsp






    

JSF 2.0 + Log4j

8. Demo

Запустите веб-приложение JSF, откройте страницу по умолчанию и нажмите кнопку.

jsf-log4j-demo

8.1 В консоли будут отображаться журналы JSF и приложения.

jsf logging in console

Рис.: Консоль Eclipse

8.2 Журнал JSF и приложения будет регистрироваться в${tomcat}\logs\jsfapp.log.

jsf logging in file

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

Скачать исходный код

Скачать -JSFAndLog4j.zip (12 КБ)