System.Diagnostics.Trace - 记录异常的正确方法

11

我正在使用Azure Worker Role中的Trace类。

我想以一种打印有关异常所有信息的方式记录异常,通常包括:

  • 异常消息
  • 异常堆栈跟踪
  • 递归打印内部异常

我只看到了一个Trace.TraceError方法,它会获取一个字符串和参数。难道没有类似Java日志框架获取异常并知道如何记录它的东西吗?(是的,我正在MS世界中迈出第一步...)


8
你应该意识到(Erno de Weerd的回答利用了这个事实),Exception.ToString()会格式化所有通常在任何地方显示的异常信息。(多年来,我没有意识到这一点,一直在使用Exception.Message和Exception.this以及Exception.that来显示异常。) - RenniePet
1
既然你说你是 .Net 新手,我再补充一下:.Net 有几个日志记录包可供选择。这里有一个比较,可能不太客观,因为它是由其中一个包的所有者发布的:http://www.dotnetlogging.com/comparison/ - RenniePet
1个回答

10
没有,但是你可以为Exception类编写一个扩展方法来实现这个功能,这样你就可以调用它了。
someException.Trace();

Exception类的ToString方法可能已经返回了您想要的所有内容,只需跟踪它即可。您可以在同一方法中添加其他信息(如果堆栈跟踪不足,则递归内部异常),例如进程ID、用户ID、线程ID等。

public static class ExceptionExtensions
{
    public static void Trace(this Exception _this)
    {
        Trace.TraceError("{0:HH:mm:ss.fff} Exception {1}", DateTime.Now, _this);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接