【发布时间】:2013-08-31 14:44:42
【问题描述】:
记录完整异常详细信息(包括所有可能的内部异常)的最佳做法是什么?
目前,我使用以下代码:
try
{
//some code that throws an exception
}
catch(Exception ex)
{
do
{
Console.WriteLine(ex.Message+ex.StackTrace);
ex=ex.InnerException;
}while(ex!=null)
}
是否存在此代码可能失败的情况?
【问题讨论】:
-
是的,您可能还想处理AggregateException,因为他们有一个InnerExceptions 属性,否则您会错过。
-
您的记录器没有处理整个异常,还是您正在编写记录器?
-
我假设您实际上使用了一些实用程序(第三方记录器或您自己的类/实现),因此您不会在需要尝试/捕获/记录的任何地方重复记录代码本身?此外,我个人对其进行了更新,因此它为每个连续的内部异常增加了初始选项卡缩进(或者您可以使用其他机制),因此当我阅读日志时,我可以区分
InnerException父/子关系,而不仅仅是获得一个平面列表异常并试图找出一个停止和另一个开始的地方。编辑:并且我在它前面加上“INNER-EXCEPTION:” -
@MatthewWatson 直到现在我才知道 AggregateException!谢谢
-
使用 ex.ToString() 会是更好的做法。
标签: c# .net exception exception-handling