此时情绪此时天,无事小神仙
好好生活,平平淡淡每一天

编辑

Jfinal配置监听器:功能耗时&异常捕获输出日志

相关依赖jar包

JFinal配置 log4j 日志

在 extends JFinalConfig 配置类的 configPlugin() 方法中配置 log4j 日志

@Override
public void configPlugin(Plugins arg0) {
    // 加载log4j日志:后面配置 log4j 文件的路径
    PropertyConfigurator.configure("D:/logfile/log4j.properties");
}

log4j 日志文件代码

timeAround 和 功能耗时、异常捕获日志 切面类的 日志 一致

log4j.rootLogger=info,A1,R,E

log4j.appender.A1=org.apache.log4j.ConsoleAppender 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout 
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] %m%n 
log4j.logger.org.apache.commons=info
log4j.logger.org.apache.struts=info
log4j.logger.com.opensymphony.xwork2=info
log4j.logger.org.springframework=info
log4j.logger.org.hibernate.ps.PreparedStatementCache=info
log4j.logger.org.hibernate=info

#info级别日志
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=D:\\LogOut\\Project\\Project.log
log4j.appender.R.MaxFileSize=200MB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS}[%p] [%l][%t]%n                   \u3010%m\u3011%n%n

#error级别日志
log4j.appender.E=org.apache.log4j.RollingFileAppender
log4j.appender.E.File=D:\\LogOut\\Project\\error.log
log4j.appender.E.Threshold= ERROR
log4j.appender.E.MaxFileSize=200MB
log4j.appender.E.MaxBackupIndex=50
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS}[%p] [%l][%t]%n                   \u3010%m\u3011%n%n

#功能耗时、异常捕获日志
log4j.logger.timeAround=info,timeAround
log4j.appender.timeAround=org.apache.log4j.RollingFileAppender
log4j.appender.timeAround.File=D:\\LogOut\\Project\\timeAround.log
log4j.appender.timeAround.MaxFileSize=200MB
log4j.appender.timeAround.MaxBackupIndex=10
log4j.appender.timeAround.layout=org.apache.log4j.PatternLayout
log4j.appender.timeAround.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS}[%p] [%l][%t]%n                   \u3010%m\u3011%n%n
log4j.additivity.timeAround=false  ——指定子 log4j.additivity.timeAround 的日志不会出现在 父类 project.log 中,默认是true

JFinal配置监听器

在 extends JFinalConfig 的配置类的 configInterceptor() 方法中配置监听 log4j 日志

@Override
public void configInterceptor(Interceptors me) {
    // 配置拦截器:功能耗时日志和未捕获异常日志
    me.add(new BaseInterceptor());
}

监听器实现类代码

参考API

https://tool.oschina.net/uploads/apidocs/jfinal/com/jfinal/aop/package-summary.html

https://tool.oschina.net/uploads/apidocs/jfinal/index.html?com/jfinal/core/ActionInvocation.html

import java.util.Map;
import org.apache.log4j.Logger;
import com.jfinal.aop.Interceptor;
import com.jfinal.core.ActionInvocation;
/**
 * @version 创建时间:2020年4月29日下午2:21:00
 * @Description: 功能耗时日志和未捕获异常日志
 */
public class BaseInterceptor implements Interceptor {
    private static Logger logger = Logger.getLogger(BaseInterceptor.class);
    private static Logger timeAround = Logger.getLogger("timeAround");
    /**
     * <p>Title: intercept</p>
     * @date:2020年4月29日下午2:40:18
     * @Description: 重写拦截器方法:日志打印功能耗时和未捕获异常
     * <p>Description: </p>
     * @param ai--
     * @see com.jfinal.aop.Interceptor#intercept(com.jfinal.core.ActionInvocation)
     */
    @Override
    public void intercept(ActionInvocation ai) {
        /**
         * --功能耗时开启
         */
        // 开始时间
        long start = System.currentTimeMillis();
        // java类名:net.jfinal.Action.LoginAction
        String className = ai.getController().getClass().getName();
        // 方法名:login
        String methodName = ai.getMethodName();
        timeAround.info("into action "+className+"."+methodName);
        // 获取所有参数
        Map<String, String[]> parameterMap = ai.getController().getRequest().getParameterMap();
        // 标记第几个参数
        int index = 1;
        // 遍历参数打印到日志
        for (String key : parameterMap.keySet()) {
            String[] params = parameterMap.get(key);
            for (String param : params) {
                timeAround.info(className+"."+methodName+"\t第" + index + "个参数:" + param);
                index++;
            }
        }
        /**
         * --若Controller层未捕获异常打印到error日志中
         */
        try {
            ai.invoke();
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("BaseInterceptor err", e);
            timeAround.info("BaseInterceptor err", e);
        }
        //********************捕获异常结束********************\\
        timeAround.info(className+"."+methodName+" 执行时间为:"+(System.currentTimeMillis()-start)+"ms");
        //--------------------功能耗时结束--------------------\\
    }

}
posted @ 2020-04-29 15:38  踏步  阅读(693)  评论(0编辑  收藏  举报