2013-07-11 15 views
9

Tôi sử dụng lớp TraceSource để đăng nhập vào các dự án .NET của mình.Tôi nên xác định điều gì với đối số id trong phương pháp TraceSource.TraceEvent?

Tuy nhiên, điểm chưa bao giờ rõ ràng đối với tôi là mục đích của thông số id trong phương thức TraceEvent. Hiện tại, tôi luôn đặt nó thành 0.

Nhưng việc sử dụng hữu ích hoặc điển hình là gì?

tôi có thể nghĩ ra một vài khả năng:

  • Đó là một ID cho sự xuất hiện của sự kiện (ví dụ: cùng một dòng mã tạo ra một ID khác nhau trên mỗi thực hiện);
  • Đây là ID cho cuộc gọi phương thức (nghĩa là bạn có thể phỏng đoán dòng mã từ ID);
  • Đây là ID cho một nhóm các sự kiện tương tự (ví dụ: tất cả thông báo lỗi cho biết cơ sở dữ liệu không có cùng một ID);
  • Đây là ID cho một tập hợp các sự kiện có liên quan đến hoạt động lôgic, kết hợp với các giá trị điều tra TraceEventType.(Start|Stop|Suspend|Resume|Transfer);

Trả lời

6

Tôi đã tự hỏi mình cùng một câu hỏi và tôi không tìm thấy bất kỳ điều gì để làm rõ điều này trong bất kỳ tài liệu nào của Microsoft. Điều tôi đã tìm thấy là bài viết được viết bởi Microsoft MVP, Richard Grimes: "The id parameter is whatever you choose it to be, there is no compulsion that a particular ID is associated with a particular format message." Ông sử dụng 0, cho đối số id, trong tất cả các ví dụ.

Trong bài viết MSDN, tôi đã thấy nó được sử dụng ngẫu nhiên, không cung cấp bất kỳ thông tin bổ sung nào. Tôi tin rằng bạn có thể sử dụng theo bất kỳ cách nào giúp bạn tốt nhất khi đọc nhật ký, miễn là bạn duy trì cùng một quy ước mã. Nó có thể chứng minh hữu ích sau đó trong lọc theo dõi, nếu bạn muốn sử dụng phương thức SourceFilter.ShouldTrace, chấp nhận một đối số id quá.

Tôi sử dụng nó để mô tả loại lỗi, nếu tôi gặp lỗi hoặc sử dụng 0 cho bất kỳ điều gì khác.

+0

Tôi tin (không có bằng chứng), khi bạn lần đầu tiên 'TraceEvent()' có id và ngay sau 'TraceData()' với cùng id, người nghe có thể liên kết dữ liệu với sự kiện ?! Ví dụ: Trước tiên bạn 'TraceEvent()' là một ngoại lệ và ngay sau đó dấu vết ngăn xếp 'TraceData()'. – WiSeeker

4

Theo như tôi đã thấy trong tài liệu, nó không dành riêng cho một mục đích. Tôi nghĩ rằng đó là có cho bạn để buộc với logic của riêng bạn để truy tìm các sự kiện. Phương pháp ShouldTrace() trên SourceFilter có thông số id phù hợp, vì vậy bạn cũng có thể sử dụng thông số này để xác định sự kiện hoặc loại sự kiện nào đi đến đâu.

Cá nhân, khi tôi sử dụng TraceSource (không được thừa nhận nhiều, chỉ mới phát hiện ra nó gần đây), tôi sử dụng nó để theo dõi các loại sự kiện hoặc danh mục. Trong một ứng dụng, tôi đã có một enum cho các loại sự kiện mà tôi đã sử dụng với phương thức ghi nhật ký khác, với các giá trị Debug, Info, Warn, Error, Fatal, vì vậy tôi truyền nó tới int và sử dụng nó như là id. vì vậy tôi có thể lọc ra bất cứ điều gì dưới mức mà tôi đã quan tâm để de-lộn xộn dấu vết. Một khả năng khác là bạn có thể sử dụng các giá trị khác nhau để liên quan đến các phần khác nhau của ứng dụng, do đó, Truy cập dữ liệu = 1, Tài khoản người dùng = 2, Logic sản phẩm = 3, Thông báo = 4, Giao diện người dùng = 5 v.v. sau đó có thể sử dụng tính năng này để lọc theo dõi xuống chỉ theo loại điều bạn đang xem.Ngoài ra, bạn có thể sử dụng các giá trị id khác nhau để chỉ các loại sự kiện khác nhau, vì vậy bạn có thể sử dụng chúng như mã lỗi để (ví dụ) bất kỳ lúc nào bạn thấy kết nối cơ sở dữ liệu không thể được thiết lập, hoặc bất cứ điều gì.

Nó không đặc biệt là vấn đề gì bạn sử dụng tham số id cho, miễn là:

  • Nó rất hữu ích cho bạn trong việc xây dựng và sửa lỗi chương trình
  • Rõ ràng và dễ hiểu đối với các lập trình viên đọc thông qua mã của bạn
  • Nó được sử dụng một cách nhất quán trong suốt chương trình

một khả năng là bạn có thể có một lớp học tập trung mà người đàn ông độ tuổi sự kiện id s và cung cấp các giá trị dựa trên một số loại đầu vào để đảm bảo rằng toàn bộ ứng dụng sử dụng cùng một số id cho cùng một điều.

Các vấn đề liên quan