jfinal 日誌log4j使用

本文使用環境java

  1. win7sql

  2. Idea 14.1.4數據庫

  3. jfinal 2.0apache

1.jfinal如何使用log4j

a.導入jar包app

將官網提供的log4j.jar包導入項目

b.配置文件ide

在項目配置文件(project/src/log4j.properties)中配置以下內容便可生效:ui

log4j.rootLogger=INFO, stdout, file
log4j.appender.stdout.Target=System.out
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n

# Output to the File
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=./myapp.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n

# Druid
log4j.logger.druid.sql=warn,stdout
log4j.logger.druid.sql.DataSource=warn,stdout
log4j.logger.druid.sql.Connection=warn,stdout
log4j.logger.druid.sql.Statement=debug,stdout
log4j.logger.druid.sql.ResultSet=warn,stdout

c.生成日誌文件debug

運行項目後將在project根目錄下生成myapp.log的文件。

2.jfinal 異常記錄到log4j

2.1 擴展異常類ExceptionIntoLogInterceptor

package interceptor;

import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.JFinal;
import com.jfinal.log.Logger;

/**
 * 異常處理日誌 全局攔截器
 * Created by rener on 2015/12/7.
 */
public class ExceptionIntoLogInterceptor implements Interceptor {

    private static final Logger log = Logger.getLogger(ExceptionIntoLogInterceptor.class);

    @Override
    public  void intercept(Invocation invocation){
        //Controller controller=invocation.getController();
        //HttpServletRequest request=controller.getRequest();
        try{
            invocation.invoke(); //必定要注意,把處理放在invoke以後,由於放在以前的話,是會空指針
        }catch (Exception e){
            //log 處理
            logWrite(invocation, e);
        }finally {
            //記錄日誌到數據庫,暫未實現
            try{

            }catch (Exception ee){

            }
        }


    }


    private void logWrite(Invocation inv,Exception e){
        //開發模式
        if (JFinal.me().getConstants().getDevMode()){
            e.printStackTrace();
        }
        StringBuilder sb =new StringBuilder("\n---Exception Log Begin---\n");
        sb.append("Controller:").append(inv.getController().getClass().getName()).append("\n");
        sb.append("Method:").append(inv.getMethodName()).append("\n");
        sb.append("Exception Type:").append(e.getClass().getName()).append("\n");
        sb.append("Exception Details:");
        log.error(sb.toString(),e);

    }
}

2.2 配置AppConfig.java中的configInterceptor註冊全局攔截

@Override
    public void configInterceptor(Interceptors interceptors){
        //全局攔截器,對全部請求攔截

        //添加控制層全局攔截器
        //interceptors.addGlobalActionInterceptor(new GlobalActionInterceptor());
        interceptors.addGlobalActionInterceptor(new ExceptionIntoLogInterceptor());
        //添加業務層全局攔截器
        //interceptors.addGlobalServiceInterceptor(new GlobalServiceInterceptor());
        interceptors.addGlobalServiceInterceptor(new ExceptionIntoLogInterceptor());

        //兼容老版jfinal寫法
        //interceptors.add(new GlobalActionInterceptor());
    }

啓用項目後,發生異常將記錄到日誌文件。指針

相關文章
相關標籤/搜索