2014-12-25 119 views
5

我使用Azure工作者角色中的Trace類。System.Diagnostics.Trace - 記錄異常的正確方法

我要登錄的方式異常,將打印有關的異常通常是所有的信息:

  • 異常消息
  • 異常堆棧跟蹤
  • 遞歸打印內部異常

我只看到一個Trace.TraceError方法獲取一個字符串和參數。是不是有相當於Java的日誌框架獲得異常並知道如何記錄它的東西? (是的,我正在做MS世界的第一步......)

+6

你應該知道(和艾爾諾德Weerd的答案利用這一事實)是Exception.ToString()格式化所有的,你通常看到的任何地方顯示的異常信息。 (多年來我沒有意識到這一點,並且正在使用Exception.Message和Exception.this和Exception.that來顯示一個異常。) – RenniePet

+1

另一個評論,因爲你說你是.Net的新手:有幾個可用的日誌包爲.Net。下面是一個比較,它可能並不是沒有偏見的,因爲它是由一個包的所有者發佈的:http://www.dotnetlogging.com/comparison/ – RenniePet

回答

6

不,沒有。但是,你可以寫異常的類,它的擴展方法這個,所以你可以調用

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); 
    } 
}