很多异常最佳实践中指出,记录日志后不应该抛出异常,或者说抛出异常就不要记录日志了原因是外层捕获异常会写入 error 日志,如果已经写了 日志日志就会重复记录
但是发现有些场景下貌似应该记录日志,比如
try{
//一些 SQL 操作,正常情况下不应该抛出异常
//一但抛出异常,就说明存在很严重的问题需要日志记录下
}catch(Exception e){
//应该 log.error()
//还需要抛出异常 throw e,最终返给 controller 给用户提示
}
这种类似的情况很常见 是否应该记录异常呢
1
pursuer 2020-04-07 22:55:54 +08:00
不用在意最佳实践,流程上需要怎么做就怎么做就行,你还可以换一个 Exception 抛出去,然后把 Cause 设置为捕获到的异常
|
2
Kaiv2 2020-04-08 08:22:36 +08:00 via Android
正常是不应该打印日志了然后又抛出的,分析下异常后是否需要处理其他业务逻辑,然后又要通知调用方的情况。很多情况下是把异常当做业务流程控制使用了,然后就出现这了个问题。
|
3
haochih 2020-04-08 12:31:14 +08:00
如果你的 catch 在这里结束了,那么就 log 。
如果你的 catch 在这里没有结束,需要重新 throw 出去,那么总归会有一个地方去 catch 你重新 throw 出去的那个 exception,去那个地方 log 就好了,能这么做的前提是 cause 一定要带着。 |