Java 中 Exception 记录日志后又向外抛出不合理吗?

2020-04-07 21:14:02 +08:00
 noble4cc

很多异常最佳实践中指出,记录日志后不应该抛出异常,或者说抛出异常就不要记录日志了原因是外层捕获异常会写入 error 日志,如果已经写了 日志日志就会重复记录

但是发现有些场景下貌似应该记录日志,比如

try{

	//一些 SQL 操作,正常情况下不应该抛出异常
    //一但抛出异常,就说明存在很严重的问题需要日志记录下
    
}catch(Exception e){
	//应该 log.error()
    //还需要抛出异常 throw e,最终返给 controller 给用户提示
}

这种类似的情况很常见 是否应该记录异常呢

2893 次点击
所在节点    Java
3 条回复
pursuer
2020-04-07 22:55:54 +08:00
不用在意最佳实践,流程上需要怎么做就怎么做就行,你还可以换一个 Exception 抛出去,然后把 Cause 设置为捕获到的异常
Kaiv2
2020-04-08 08:22:36 +08:00
正常是不应该打印日志了然后又抛出的,分析下异常后是否需要处理其他业务逻辑,然后又要通知调用方的情况。很多情况下是把异常当做业务流程控制使用了,然后就出现这了个问题。
haochih
2020-04-08 12:31:14 +08:00
如果你的 catch 在这里结束了,那么就 log 。
如果你的 catch 在这里没有结束,需要重新 throw 出去,那么总归会有一个地方去 catch 你重新 throw 出去的那个 exception,去那个地方 log 就好了,能这么做的前提是 cause 一定要带着。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/660234

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX