V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Newyorkcity
V2EX  ›  问与答

请问又要靠抛出异常中断后续操作,又要记录日志时最优雅的操作应该是?( Java )

  •  
  •   Newyorkcity · 2021-04-24 14:38:15 +08:00 · 1078 次点击
    这是一个创建于 1091 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如这样一个东西:

            if (immutable) {
                LOGGER.error("正试图改动被设置为不允许变动的数据!");
                throw new IllegalStateException("正试图改动被设置为不允许变动的数据!");
            }
    

    这样到时候会导致错误信息 正试图改动被设置为不允许变动的数据 重复出现,感觉上很不优雅。。

    而 logback 或者说常见的 java 日志系统又不允许 log 的参数仅仅只有一个 Exception 的实例,必须带上信息。

    或者说不应该使用异常来中断后续流程?记录 error 后使用 return 结束此函数?可是如此仅仅只是这个函数内部之后的语句不调用了,那调用这个函数的外部却还可能继续执行。。

    谢谢

    4 条回复    2021-04-24 18:25:53 +08:00
    jedrek
        1
    jedrek  
       2021-04-24 15:06:04 +08:00
    只在上层捕获记录日志
    ErrorMan
        2
    ErrorMan  
       2021-04-24 15:55:26 +08:00
    > 而 logback 或者说常见的 java 日志系统又不允许 log 的参数仅仅只有一个 Exception 的实例,必须带上信息。

    没听说过这样的限制,直接传异常给 logger 一般都能自动打印堆栈和错误吧
    billlee
        3
    billlee  
       2021-04-24 16:05:20 +08:00
    一般也不会到处捕获 rethrow 吧,我一般是出错处打 error 日志,然后在最外层打 exception 日志,最多就打两遍。
    Hugg
        4
    Hugg  
       2021-04-24 18:25:53 +08:00 via Android
    catch 后 log 再 throw,security 源码就有这样写的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1005 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:50 · PVG 02:50 · LAX 11:50 · JFK 14:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.