Newyorkcity
V2EX  ›  问与答

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

  •  
  •   Newyorkcity · Apr 24, 2021 · 2096 views
    This topic created in 1848 days ago, the information mentioned may be changed or developed.

    比如这样一个东西:

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

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

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

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

    谢谢

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

    没听说过这样的限制,直接传异常给 logger 一般都能自动打印堆栈和错误吧
    billlee
        3
    billlee  
       Apr 24, 2021
    一般也不会到处捕获 rethrow 吧,我一般是出错处打 error 日志,然后在最外层打 exception 日志,最多就打两遍。
    Hugg
        4
    Hugg  
       Apr 24, 2021 via Android
    catch 后 log 再 throw,security 源码就有这样写的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3016 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 06:52 · PVG 14:52 · LAX 23:52 · JFK 02:52
    ♥ Do have faith in what you're doing.