2014-12-25 15 views
5

Tôi đang sử dụng lớp Trace từ vai trò Công nhân Azure.System.Diagnostics.Trace - đúng cách để đăng nhập ngoại lệ

Tôi muốn đăng nhập ngoại lệ trong một cách mà sẽ in tất cả các thông tin về các ngoại lệ mà thường là:

  • Thông điệp ngoại lệ
  • ngoại lệ stacktrace
  • đệ quy in các ngoại lệ nội

Tôi chỉ thấy phương thức Trace.TraceError nhận chuỗi và đối số. Không phải là có một cái gì đó tương đương với khung khai thác gỗ của Java mà được một ngoại lệ và biết làm thế nào để đăng nhập nó? (vâng, tôi đang thực hiện các bước đầu tiên trong thế giới MS ...)

+6

Bạn nên biết (và câu trả lời của Erno de Weerd khai thác thực tế này) rằng Exception.ToString() định dạng tất cả thông tin mà bạn thường thấy được hiển thị ở bất kỳ đâu ngoại lệ. (Trong nhiều năm tôi đã không nhận ra điều này, và đã sử dụng Exception.Message và Exception.this và Exception.that để hiển thị Ngoại lệ.) – RenniePet

+1

Một nhận xét khác kể từ khi bạn nói rằng bạn mới sử dụng .Net: Có một số gói ghi nhật ký có sẵn cho .Net. Đây là một so sánh, có thể không được thiên vị vì nó được xuất bản bởi một trong các chủ sở hữu của gói: http://www.dotnetlogging.com/comparison/ – RenniePet

Trả lời

6

Không, không có. Nhưng bạn có thể viết một phương pháp mở rộng cho lớp ngoại lệ mà thực hiện điều này, do đó bạn có thể gọi

someException.Trace(); 

Phương pháp ToString của lớp Exception lẽ trả về tất cả các bạn muốn vì vậy chỉ cần dấu vết đó. Bạn có thể thêm thông tin bổ sung (recurse bên trong trường hợp ngoại lệ nếu ngăn xếp theo dõi là không đủ) quá trình id, id người dùng, thread id, và như vậy trong cùng một phương pháp.

public static class ExceptionExtensions 
{ 
    public static void Trace(this Exception _this) 
    { 
     Trace.TraceError("{0:HH:mm:ss.fff} Exception {1}", DateTime.Now, _this); 
    } 
} 
Các vấn đề liên quan