【发布时间】:2016-04-26 06:29:54
【问题描述】:
根据这个答案:https://stackoverflow.com/a/1722991/680026 如果你真的做除了记录以外的事情,你应该只使用 try-catch:
如果您只想记录异常并且不捕获异常 把它扔到堆栈上。它没有任何意义,而且代码混乱。
但是在更高级别不可用的日志记录信息呢? 例如:
private void AddSomethingToTable(string tablename, string fieldname) {
try {
InsertFieldToTable(tablename, fieldname);
} catch (Exception ex) {
log.ErrorFormat("Could not insert field '{0}' into table '{1}'", fieldname, tablename);
throw;
}
}
private void main() {
try {
AddSomethingToTable("users","firstname");
AddSomethingToTable("users","lastname");
AddSomethingToTable("users","age");
} catch (Exception ex) {
MessageToUser("Sorry. Saving did not work.",ex);
}
}
如您所见:在我的(完全虚构的)示例中,我记录了有关确实导致错误的字段的信息。这可能是开始查找错误的一些有用信息。
因此,即使我只记录了错误,这些信息也可能很重要,并且在该方法之外会丢失。
这是对 try-catch 的有效使用,还是有其他建议的方法来记录它? (我不认为总是记录这些信息(不管是否发生错误)是一个有效的解决方案)
【问题讨论】:
-
我认为您用“但是在更高的实例中不可用的日志信息”回答了您自己的问题。我不喜欢“总是做X,从不做Y”,因为有时它是必要的。这也是为什么这里不鼓励“最佳实践”问题的原因。如果需要记录信息来解决问题,并且如果您不立即记录,则会丢失此信息,请记录信息。
-
这个related question 可能会对你有所帮助。
标签: c# .net exception try-catch