jfinal 将exception等异常信息保存到数据库,格式化堆栈异常信息

首先需要给jfinal创建拦截器

public class Exceptionnterceptor implements Interceptor {

	@Override
	public void intercept(Invocation ai) {
		Controller controller = (Controller)ai.getController();
		HttpServletRequest request = controller.getRequest();
		
		try {
			ai.invoke();
			return;
		} catch (Exception e) {
			e.printStackTrace();
			doLog(ai,e);
			//判断是否ajax请求
        	String header = request.getHeader("X-Requested-With");
            boolean isAjax = "XMLHttpRequest".equalsIgnoreCase(header);
            if(isAjax){
            	controller.renderJson("0");
            }else{
            	controller.render("/WEB-INF/view/error/500.html");
            }
		}finally{
			//TODO
		}
	}
	private void doLog(Invocation ai,Exception e) {
		//开发模式
		if(JFinal.me().getConstants().getDevMode()){
			e.printStackTrace();
		}
		//业务异常不记录
		if(JfinalUtils.getSwitch(CommonUtils.SettingGlobal.SYSTEM_RUNTIME_LOG_SAVEDB_SWITCH, ai.getController().getSession())){
			//系统异常记录开关
			TSysLog4j sl = new TSysLog4j();
			sl.set("project_id", 1);
			sl.set("level", "ERROR");
			sl.set("controller", ai.getController().getClass().getName());
			sl.set("method", ai.getMethodName());
			sl.set("type", e.getClass().getName());
			sl.set("message", getStackMsg(e));
			sl.set("add_time", DateUtils.getDate());
			StackTraceElement[] stackArray = e.getStackTrace();  
			if(stackArray!=null && stackArray.length>0){
				StackTraceElement element = stackArray[0];  
	            sl.set("line", element.getLineNumber());
			}
			sl.save();
		}
		if(JfinalUtils.getSwitch(CommonUtils.SettingGlobal.SYSTEM_RUNTIME_LOG_EMAIL_SWITCH, ai.getController().getSession())){
			//发送邮件通知
		}
	}
	/**
	 * 获取格式化堆栈异常信息
	 * @author sun
	 * @date 2017年5月15日 下午9:16:55
	 * @param e
	 * @return
	 */
	private static String getStackMsg(Exception e) {  
        try {  
            StringWriter sw = new StringWriter();  
            PrintWriter pw = new PrintWriter(sw);  
            e.printStackTrace(pw);  
            return sw.toString() + "\r\n";  
        } catch (Exception e2) {  
            return "bad getErrorInfoFromException";  
        }  
    }  
}

具体效果图请参考个人博客

版权属于: 技术客

原文地址: https://www.sunjs.com/article/detail/a48c945ffb27408d8755e765c50fd39b.html

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值