2009-05-15 37 views
11

Đây có thể là một câu hỏi khái niệm OOP, nhưng đây là những gì tôi muốn làm.Hệ thống ghi đè.Diagnostics.Trace.WriteLine để đăng nhập vào một tệp

Tôi có một ứng dụng xuất ra thông tin gỡ lỗi bằng System.Diagnostics.Trace.WriteLine để có thể xem bằng DebugView.

Tôi muốn ghi đè/mở rộng (không chắc chắn về thuật ngữ thích hợp) phương pháp này để ghi văn bản vào tệp thay thế hoặc có thể ngoài đầu ra Dấu vết. Điều này sẽ cho phép tôi viết một phương thức WriteLine mới cho ứng dụng của tôi, và tôi có thể để lại tất cả các câu lệnh System.Diagnostics.Trace.WriteLine khác không thay đổi trong suốt phần còn lại của ứng dụng.

Vậy tôi sẽ thay đổi hành vi của phương pháp này trong ứng dụng VB.Net như thế nào?

+1

bất kỳ giải pháp cuối cùng nào? có 2 câu trả lời, không được chấp nhận ... – Kiquenet

Trả lời

26

Bạn có hoàn toàn cam kết vẫn sử dụng Trace không? Nếu không, tôi sẽ sử dụng hệ thống ghi nhật ký đầy đủ tính năng hơn như Log4Net.

Tuy nhiên, nếu bạn thực sự muốn sử dụng Trace thì bạn có thể định cấu hình lại TraceListener s được sử dụng với tệp app.config. Các TraceListener MSDN docs đưa ra một ví dụ hơi như thế này:

<configuration> 
    <system.diagnostics> 
    <trace autoflush="false" indentsize="4"> 
     <listeners> 
     <add name="fileLogger" 
      type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="LogFile.log" /> 
     <remove name="Default" /> 
     </listeners> 
    </trace> 
    </system.diagnostics> 
</configuration> 

TextWriterTraceListener sẽ đổ log vào file nhất định. (. Có những lựa chọn khác có sẵn quá)

Ngoài ra, bạn có thể làm điều này lập trình:

Trace.Listeners.Add(new TextWriterTraceListener("foo.log")); 

Lưu ý rằng bạn có thể cần phải tuôn ra một cách rõ ràng dấu vết trước khi thoát khỏi ứng dụng của bạn, hoặc với:

Trace.Flush(); 

hoặc phức tạp hơn:

foreach (TraceListener listener in Trace.Listeners) 
{ 
    listener.Flush(); 
} 

(tôi chỉ đề cập đến nó vì Tôi đã phải thử nghiệm điều này!)

EDIT: Như đã nêu trong nhận xét, nếu bạn hài lòng khi người nghe bị xóa sau mỗi ghi (không tránh phải tuôn ra ở cuối, nhưng có thể gây hại hiệu suất) bạn có thể đặt Trace.AutoFlush thành true (bao gồm trong XML - xem thuộc tính autoflush).

+0

Không phải là sự lặp lại qua người nghe + Flush tương đương với việc gọi phương thức tĩnh Trace.Flush()? Ngoài ra, bạn có biết ứng dụng của khách hàng có thể đảm bảo rằng người nghe được xử lý đúng cách không? –

+0

Bạn cũng có thể đúng về Trace.Flush - không chắc chắn. Đối với xử lý của người nghe - Tôi hy vọng rằng người nghe không cần phải được xử lý để ghi dữ liệu của họ. –

+0

Yup, Trace.Flush thực hiện công việc kinh doanh bắt buộc. Câu trả lời đã chỉnh sửa một cách thích hợp. –

3

Có một TextWriterTraceListener mà bạn có thể định cấu hình để xuất nhật ký theo dõi vào một tệp. Thông tin cấu hình có thể được tìm thấy trên MSDN ở đây:

http://msdn.microsoft.com/en-us/library/system.diagnostics.textwritertracelistener(VS.80).aspx

Bạn cũng có thể đổ vào các bản ghi sự kiện hoặc một loạt các địa điểm khác cho một danh sách được xây dựng trong dấu vết người nghe, bạn có thể xem ở đây:

http://msdn.microsoft.com/en-us/library/4y5y10s7(VS.80).aspx

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