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有没有需要写的代码。

发布了14 篇原创文章 · 获赞 6 · 访问量 7764

猜你喜欢

转载自blog.csdn.net/freshrookie/article/details/87348803