首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么“日志和抛出”被认为是反模式?

为什么“日志和抛出”被认为是反模式?
EN

Stack Overflow用户
提问于 2011-07-10 16:03:37
回答 3查看 47K关注 0票数 99

这个问题是由一次关于this article的讨论引发的,在那里我没有得到任何好的答案。

如果不能以其他方式处理异常,为什么记录异常,然后重新抛出它(当然,保留原始堆栈跟踪)是一个坏主意?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-10 16:20:40

我认为答案很大程度上是因为如果你不能处理它,为什么你要抓住它呢?为什么不让任何可以处理它的人(或者任何没有选择只能处理它的人)记录它,如果他们觉得它是值得记录的呢?

如果您捕获它并记录它,然后重新抛出它,那么上游代码就没有办法知道您已经记录了这个异常,因此同一个异常可能会被记录两次。或者更糟的是,如果所有上游代码都遵循相同的模式,则异常可能会被记录任意次数,对于决定捕获它的代码中的每个级别记录一次,记录它,然后再次抛出它。

还有一些人可能会争辩说,由于抛出和捕获异常是相对昂贵的操作,所有这些捕获和重新抛出都无助于您的运行时性能。在简洁性和可维护性方面,它也不能帮助您的代码。

票数 142
EN

Stack Overflow用户

发布于 2011-07-10 16:20:08

我猜最简单的原因是,您通常会有一个顶级处理程序来为您做这件事,所以不需要使用这种异常处理来污染代码。

横切关注点的论点基本上是在浪费时间处理与你无关的错误。最好是让错误在调用堆栈中冒泡,直到找到合适的处理程序。

在我看来,只有当你可以对结果做一些有用的事情时,你才应该捕捉到异常。简单地捕捉日志是没有用的,因为您可以将这项工作集中到更高的位置。

票数 22
EN

Stack Overflow用户

发布于 2013-08-14 15:26:24

IMO的记录和抛出显然违反了最小惊讶原则。

如果在调用堆栈中进一步正确处理异常,则可能根本不值得在错误日志中记录该异常。然后,查找错误日志条目会让人感到困惑。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6639963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档