V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
noble4cc
V2EX  ›  Java

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

  •  
  •   noble4cc · 2020-04-07 21:14:02 +08:00 · 2707 次点击
    这是一个创建于 1477 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    pursuer
        1
    pursuer  
       2020-04-07 22:55:54 +08:00
    不用在意最佳实践,流程上需要怎么做就怎么做就行,你还可以换一个 Exception 抛出去,然后把 Cause 设置为捕获到的异常
    Kaiv2
        2
    Kaiv2  
       2020-04-08 08:22:36 +08:00 via Android
    正常是不应该打印日志了然后又抛出的,分析下异常后是否需要处理其他业务逻辑,然后又要通知调用方的情况。很多情况下是把异常当做业务流程控制使用了,然后就出现这了个问题。
    haochih
        3
    haochih  
       2020-04-08 12:31:14 +08:00
    如果你的 catch 在这里结束了,那么就 log 。
    如果你的 catch 在这里没有结束,需要重新 throw 出去,那么总归会有一个地方去 catch 你重新 throw 出去的那个 exception,去那个地方 log 就好了,能这么做的前提是 cause 一定要带着。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4031 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:16 · PVG 13:16 · LAX 22:16 · JFK 01:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.