Java异常堆栈打印的最佳实践方式

对于异常的处理,最佳的实践是每一层都把异常catch住,然后每一层都往上抛,最后在最表层把堆栈信息打印出来。记住不需要每一次层都去打印堆栈。因为每一层打印的话大家的堆栈有效信息其实是一样的。最佳的方式是在最表层进行打印。

 

最佳实践的代码示例:

Public void layer2() throws Exception{

try{

layer3();

}catch(Exceptione){

e.printStackTrace();//此行可选,只在最表层打印

Throw new Exception("layer2备注",e);

}

}

下面是在最表层打印 的效果:

java.lang.Exception: layer2备注

at huawei.testmain.layer2(testmain.java:27)

at huawei.testmain.layer1(testmain.java:33)

at huawei.testmain.main(testmain.java:42)

Caused by: java.lang.Exception: layer3备注

at huawei.testmain.layer3(testmain.java:16)

at huawei.testmain.layer2(testmain.java:24)

... 2 more

Caused by: java.lang.Exception: layer4备注

at huawei.testmain.layer4(testmain.java:6)

at huawei.testmain.layer3(testmain.java:13)

... 3 more

中间层打印的效果:

java.lang.Exception: layer3备注

at huawei.testmain.layer3(testmain.java:16)

at huawei.testmain.layer2(testmain.java:24)

at huawei.testmain.layer1(testmain.java:33)

at huawei.testmain.main(testmain.java:42)

Caused by: java.lang.Exception: layer4备注

at huawei.testmain.layer4(testmain.java:6)

at huawei.testmain.layer3(testmain.java:13)

... 3 more

最底层打印的效果:

java.lang.Exception: layer4备注

at huawei.testmain.layer4(testmain.java:6)

at huawei.testmain.layer3(testmain.java:13)

at huawei.testmain.layer2(testmain.java:24)

at huawei.testmain.layer1(testmain.java:33)

at huawei.testmain.main(testmain.java:42)

无论在那一层打印,都能显示从头到尾的调用信息(前提是底层有把异常往表层throw,如果没有的话表层在打印堆栈的时候会没有那个caused by后面的信息)。

但是使用不断往上抛异常然后在表层打印的方式,可以把底层抛异常时添加的备注信息也打出来。而在底层打印无法打出表层的备注信息。

如果你不加备注的话,try catch住然后再往外抛和不抓住直接抛是差不多的,就看你的finally有没有需要写的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值