Do I need to wrap Trace.TraceError inside a try/catch?
我正在尝试/捕获中使用System.Diagnostics.Trace TraceError来跟踪错误。通过查看traceError的实现,似乎没有真正捕获到来自侦听器的错误。这是否意味着我应该像下面这样编写代码,以避免日志记录向调用方传播错误:
1 2 3 4 5 6 7
| catch (Exception e) {
try {
Trace.TraceError(e);
} catch {
// Do nothing
}
} |
trace.traceError没有记录为抛出异常,因此不需要catch它。即使文档中记录了抛出异常,您也不应该将cx1〔0〕作为异常,什么也不做。
让例外情况出现,只有这样你才有机会发现问题所在。
看到为什么是Try…finally…good;Try…catch bad?
- 我非常不同意。如果异常冒泡没有价值,为什么要冒泡呢?如果您的日志子系统由于某种原因而失败,您应该崩溃整个应用程序吗?你应该提醒用户吗?很可能不会!在这种情况下抑制异常,并让应用程序继续执行其工作。
- @飞利浦,快点。这是一个需要注意的一般性建议。这就是我把相关问题联系起来的原因。正如您所说,规则可以根据场景进行更改:)顺便问一下,为什么要抑制错误?如果可以的话,我宁愿用代码来修复它。
- 永远不要说永不:)。我同意最佳实践是做一些例外的事情。但并非所有情况都需要。
- 我想抑制异常,因为否则它们可能传播到最终用户。另外,为了拥有一个健壮的代码,我真的可以依赖别人的文档吗?如果一个人忘记记录例外情况怎么办?正如我所说,我在跟踪的实现中没有看到try/catch
- 几乎95%的.NET方法不会有Try/Catch,因为它们不希望抑制异常。正如我们所做的那样,您可以依赖MSFT的文档。我从没见过他们忘记记录任何例外。如果一个方法/类不能像文档中那样工作,那么它就是一个bug。你可以在这里报告。