Tôi có một đối tượng TraceSource mà tôi sử dụng để đăng nhập khởi tạo của một ứng dụng VB.Net. Nó có một vài TraceListeners kèm theo:.Net: Làm thế nào để ngăn chặn tiêu đề TraceSource ("SourceName TraceEventType: Id:")?
- ConsoleTraceListener
- TextWriterTraceListener
- EventLogTraceListener
Đối với hai đầu tiên tôi muốn đầu ra nhập là "thô" - có nghĩa là, mà không tiêu chuẩn tiêu đề:
SourceName TraceEventType: Id :
tôi đã thực hiện một wrapper mà thực hiện điều này khi TraceEventType được thiết lập để Verbose:
If _buffer.EventType = TraceEventType.Verbose Then
For Each listener As TraceListener In _traceSource.Listeners
listener.Write(_buffer.Text)
Next
Else
_traceSource.TraceEvent(_buffer.EventType, id, _buffer.Text)
End If
tôi có thể làm điều này cho tất cả các truy tìm, nhưng sau đó tất cả các mục trong EventLog sẽ được liệt kê với Level = Thông tin. Vì vậy, tôi muốn có thể chỉ định mức độ nghiêm trọng của thông điệp theo dõi, nhưng tôi không thể tìm thấy bất kỳ phương pháp nào trên TraceSource hoặc TraceListeners cho phép tôi thực hiện điều này. Theo như tôi có thể nói, TraceListener có các tùy chọn cho văn bản cho nó:
- Write()
- WriteLine()
- TraceData()
- TraceEvent()
- TraceTransfer()
3 cuối cùng cho phép cung cấp TraceEventType (nhãn này ghi nhãn các mục nhập EventLog một cách chính xác, nhưng kết quả đầu ra cho bảng điều khiển và tệp nhật ký sau đó bao gồm các tiền tố và kết thúc như thế này (ví dụ):
Bootstrapper Warning: 0 : Failed to validate assembly
Có cách nào để ghi đè lên như thế nào ConsoleTraceListener và định dạng TextWriterTraceListener sản lượng của họ để không bao gồm tiêu đề này, trong khi cùng một lúc có thể gắn thẻ mục với một TraceEventType (cho EventLog)?
Đây là tốt nhất mà tôi đã đưa ra cho đến nay:
For Each listener As TraceListener In _traceSource.Listeners
If listener.GetType Is GetType(ConsoleTraceListener) OrElse listener.GetType Is GetType(TextWriterTraceListener) Then
listener.Write(_buffer.Text)
Else
listener.TraceEvent(Nothing, _traceSource.Name, _buffer.EventType, id, _buffer.Text)
End If
Next
Điều này dường như làm việc, nhưng trong tài liệu trên TraceListener.TraceEvent Method từ Microsoft, nó nói:
Important: This method is not intended to be called directly by application code but by members of the Debug, Trace, and TraceSource classes to write trace data to output.
.. Tôi không chắc đó có phải là điều tốt để làm không?
Edit:
Tôi chỉ nhận ra rằng nếu tôi làm điều gì đó giống như ví dụ cuối cùng của tôi ở đây, tôi không cần TraceSource ở tất cả, vì nó đang được bỏ qua anyway. Nhưng nó cũng có nghĩa là tôi phải thực hiện các cơ chế lọc và chuyển đổi của riêng mình (nhưng đó có thể là một mức giá OK để trả tiền để làm cho nó hoạt động theo cách tôi muốn).
Cảm ơn, tôi sẽ xem xét (mặc dù tôi không thích sử dụng phần bổ trợ bên ngoài vì một lý do nào đó). Và bây giờ tôi cũng đã thực hiện hệ thống truy tìm của riêng mình, nơi tôi có thể làm những việc tương tự. Lớp của tôi có chức năng tương tự như TraceSource, nhưng nó có hai bộ sưu tập người nghe.Một hàm hoạt động theo cách tiêu chuẩn, sử dụng TraceEvent() và phương thức kia sử dụng hàm Write() "thô". Mỗi tin nhắn được ghi lại được đẩy tới tất cả người nghe trong cả hai danh mục (tùy thuộc vào một số cờ nhất định, v.v.), vì vậy bạn có thể thêm người nghe yêu cầu gắn thẻ EventType vào một danh sách, và những người có định dạng đồng bộ/tùy chỉnh trong khác. Hoạt động tốt. – d7samurai
Tôi nghĩ thư viện rất tuyệt, nên hãy tiếp tục và thử nó, bạn có thể thích nó. Một cách có thể giúp công việc của bạn là bạn có thể sử dụng cùng một tập các lớp TraceListener, nhưng thay đổi những gì thực sự được viết thông qua cấu hình. Vì vậy, bạn có thể có một định dạng "thô" kết hợp với một số người nghe (Console và TextWriter) và định dạng "sự kiện" được liên kết với những người khác (EventLog). Nếu bạn quyết định vào tuần tới hoặc tháng tiếp theo mà bạn muốn thêm hoặc xóa một số thông tin từ một trong hai định dạng, thì bạn chỉ cần thay đổi định dạng trong app.config. Không có thay đổi mã. Chúc may mắn! – wageoghe
d7samurai, bạn có quen thuộc với NotInventedHere-Antipattern không? –