日志记录异常堆栈详细信息

一、背景

在记录日志时,使用e.getMessage()获取异常信息时,经常会得到异常信息为null的情形,这对问题定位不仅起不到辅助作用,还会对问题排查造成困扰。如果能找到一种记录异常信息堆栈的方式,把e.printStackTrace()信息都打印出来,在问题定位时就比较方便了。通过本文介绍的方式,即可实现记录异常堆栈的详细信息。

本文中方法适合不支持Apache log4j打印日志开发平台。

二、详细代码

public class jdkTest {
    private static Logger log = Logger.getLogger(jdkTest.class);

    static String eDetail = "";
    static String eMsg = "";
    public static void main(String[] args) throws Exception {
        try{
            throw new Exception("");
        }catch(Exception e){
            //打印控制台堆栈信息,做为对比
            log.error("e.printStackTrace()控制台异常堆栈信息:");
            e.printStackTrace();
            //method 1
            eDetail = collectExceptionStackMsg(e);
            //methon 2
            eMsg = e.getMessage();
        }
        log.error("方式一,程序异常,详细堆栈信息为:\r\n" + eDetail);
        log.error("方式二,程序异常,异常信息为:" + eMsg);
    }

    /**
     * 收集异常堆栈信息
     * */
    public static String collectExceptionStackMsg(Exception e){
        StringWriter sw = new StringWriter();   
        e.printStackTrace(new PrintWriter(sw, true));   
        String strs = sw.toString();
        return strs;
    }
}

三、运行结果

[ERROR] 2017-05-14 11:03:10 [main] (jdkTest.java:36) e.printStackTrace()控制台异常堆栈信息:
java.lang.Exception: 
    at test.jdkTest.main(jdkTest.java:33)

[ERROR] 2017-05-14 11:03:10 [main] (jdkTest.java:43) 方式一,程序异常,详细堆栈信息为:
java.lang.Exception: 
    at test.jdkTest.main(jdkTest.java:33)

[ERROR] 2017-05-14 11:03:10 [main] (jdkTest.java:44) 方式二,程序异常,异常信息为:
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值