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

2021-04-24 14:38:15 +08:00
 Newyorkcity

比如这样一个东西:

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

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

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

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

谢谢

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

没听说过这样的限制,直接传异常给 logger 一般都能自动打印堆栈和错误吧
billlee
2021-04-24 16:05:20 +08:00
一般也不会到处捕获 rethrow 吧,我一般是出错处打 error 日志,然后在最外层打 exception 日志,最多就打两遍。
Hugg
2021-04-24 18:25:53 +08:00
catch 后 log 再 throw,security 源码就有这样写的

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

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

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

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

© 2021 V2EX