Java 异常链被覆盖

一、前言

问题:正式服务器上有一个BUG,但是本地复现不了。于是查看日志,发现日志居然没有打印有效的错误提示,都是一些代理类的调用。
代码:

try{
   ......
}catch (Exception e) {
  e.printStackTrace();
    if (BusinessException.class == e.getClass()) {
        throw new BusinessException(e.getMessage());
    } else {
        throw new BusinessException("导入失败!");
    }
}

日志:

com.xxx.common.exception.BusinessException: 导入失败!
    at com.xxx.system.service.am.impl.CityMarketServiceImpl.importData(CityMarketServiceImpl.java:964)
    at com.xxx.system.service.am.impl.CityMarketServiceImpl$$FastClassBySpringCGLIB$$5ac06249.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)

结果:抛出的异常被BusinessException覆盖,导致异常链被覆盖,无法写入到日志文件中。

二、解决办法

private static final Logger log = LoggerFactory.getLogger(CityMarketServiceImpl.class);
try{
   ......
}catch (Exception e) {
  e.printStackTrace();
    if (BusinessException.class == e.getClass()) {
        throw new BusinessException(e.getMessage());
    } else {
        log.error(e.getMessage());
        throw new BusinessException("导入失败!");
    }
}

三、总结

日志框架使用不够熟悉。平时代码不够重视日志输出,没有仔细研究过这一块东西。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、日志简介 1.1 日志是什么(WHAT) 日志:记录程序的运行轨迹,方便查找关键信息,也方便快速定位解决问题。...
    GeekerLou阅读 27,577评论 6 20
  • 目录介绍 10.0.0.1 见过哪些运行时异常?异常处理机制知道哪些?从异常是否必须需要被处理的角度来看怎么分类?...
    杨充211阅读 518评论 0 1
  • 一、编程规约 (一)命名规约 【强制】 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反...
    喝咖啡的蚂蚁阅读 1,564评论 0 2
  • 传送门 解读阿里Java开发手册(v1.1.1) - 编程规约 前言 阿里Java开发手册谈不上圣经,但确实是大量...
    kelgon阅读 2,767评论 2 49
  • 文/Lemon 美妙的人生就是不断的更新中,不断地遇见更美好的自己,以及遇见他。世界很大,我们很小。冥冥之中遇见他...
    淡之茉阅读 308评论 0 1