catch (Exception ex)
{
Logger.LogError(ex);
}
不使用重新抛出异常是错误的,因为您可能会隐藏代码中未知的异常。
然而,我正在编写一个WCF服务,并发现自己在多个地方这样做,以确保服务不会崩溃。(SOA规定客户端不应该知道或关心内部服务错误,因为它们不知道服务实现)
例如,我的服务从文件系统读取数据。由于文件系统是不可预测的,我捕获了来自读取代码的所有异常。这可能是由于坏数据、权限问题、缺少文件等等。客户端不关心,它只会收到一个“数据不可用”的响应,真正的原因记录在服务日志中。我也不关心,我只知道读取时出了问题,我不想崩溃。
现在我可以理解可能会引发与文件系统无关的异常。例如,也许我没有足够的内存,尝试创建读取缓冲区已经抛出了异常。然而事实仍然是,内存问题仍然与读取相关。我尝试读取但失败了。也许还有足够的内存运行其他服务。我应该重新抛出内存异常并崩溃服务吗,即使它对其他任何东西都不会造成问题?
我很赞赏只捕获你能够处理的异常的一般思想,但是如果你有一个独立的代码片段可能会失败而不影响其他任何内容,那么捕获由该代码生成的任何错误是可以的吗?这难道不与具有应用程序范围的异常处理程序没有什么不同吗?
catch(Exception){}
,那么如何记录它呢? - CodesInChaos