Man*_*anu 74 logging exception-handling anti-patterns
围绕这篇文章的讨论引发了这个问题,我没有收到任何好的答案.
为什么要记录你的异常然后重新抛出它(当然保留原始的堆栈跟踪)是一个坏主意,如果你不能处理它呢?
aro*_*oth 104
我认为答案很大程度上是因为如果你无法处理它,你为什么要抓住它?为什么不让任何人能够处理它(或者除了处理它之外别无选择)记录它,如果他们觉得它是值得记录的?
如果你捕获并记录它并重新抛出它,那么上游代码就无法知道你已经记录了异常,因此同样的异常可能会被记录两次.或者更糟糕的是,如果所有上游代码都遵循相同的模式,则异常可能被记录任意次数,一次针对决定捕获它的代码中的每个级别,记录它,然后再次抛出它.
也有人可能会说,既然抛出和捕获异常是相对昂贵的操作,这一切捕获和重新抛出是帮不了你的运行时性能.它也不会在简洁性或可维护性方面帮助您的代码.
sup*_*cat 45
如果实体捕获并重新抛出异常有理由相信它包含的信息不会在调用堆栈中进一步记录,那么Log-and-throw是一个很好的模式 - 至少不是以最理想的方式.可能出现以下几个原因:
Jef*_*ter 18
我想最简单的原因是你通常只有一个顶级处理程序为你做这个,所以没有必要用这个异常处理来污染代码.
横切关注的论点基本上是浪费时间处理与您无关的错误.最好让错误冒出调用堆栈,直到找到合适的处理程序.
在我看来,你应该捕获异常的唯一时间是你可以对结果做一些有用的事情.仅仅记录日志是没有用的,因为你可以进一步集中这项工作.
IMO登录和投掷明显违反了最低惊喜原则.
如果在调用堆栈中进一步正确处理异常,则可能根本不值得使用错误日志条目.然后找到错误日志条目很困惑.
| 归档时间: |
|
| 查看次数: |
30747 次 |
| 最近记录: |