本文使用環境java
win7sql
Idea 14.1.4數據庫
jfinal 2.0apache
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的文件。
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); } }
@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()); }
啓用項目後,發生異常將記錄到日誌文件。指針