2015-12-28 19 views
5

Theo như tôi thấy, có hai cách để tạo các thông điệp theo dõi trong .NET.Nguồn theo dõi nào được System.Diagnostics.Trace.WriteLine sử dụng?

  1. Các phương pháp tĩnh của System.Diagnostics.Trace:

    Trace.WriteLine("Something happened"); 
    
  2. phương pháp Các thể hiện của System.Diagnostics.TraceSource:

    var ts = new TraceSource("TraceTest"); 
    ts.TraceInformation("Something happened"); 
    

Trong file app.config của tôi, tôi có thể thêm một dấu vết người nghe cho mọi thứ:

<system.diagnostics> 
    <trace> 
     <listeners> 
      ... 
     </listeners> 
    </trace> 
</system.diagnostics> 

hoặc cho một dấu vết nguồn cụ thể:

<system.diagnostics> 
    <sources> 
     <source name="..."> 
      <listeners> 
       ... 
      </listeners> 
     </source> 
    </sources> 
</system.diagnostics> 

Câu hỏi của tôi

Nếu tôi sử dụng phương pháp đầu tiên (phương pháp tĩnh của System.Diagnostics.Trace), trong đó tên dấu vết nguồn Được sử dụng?

Tôi đã kiểm tra MSDN page of System.Diagnostics.Trace, nhưng không tìm thấy câu trả lời ở đó.

+0

tôi đừng nghĩ rằng nó sử dụng một nguồn. Nó hoạt động như một loại 'nguồn toàn cầu'. Hai API song song, có thể là một di tích lịch sử. –

+0

@ HenkHolterman: Điều đó hoàn toàn có thể (nguồn theo dõi được thêm vào trong v2.0), nhưng tôi chưa tìm thấy bằng chứng cho nó. Tuy nhiên, cũng có thể hiểu rằng họ đã thêm một nguồn cụ thể cho các hoạt động "kế thừa" đó. – Heinzi

Trả lời

3

Tôi đã kiểm tra nguồn gốc của Trace.Writeline với JustDecompile và nó enums tất cả người nghe và gửi thông điệp tới tất cả:

   foreach (TraceListener listener in TraceInternal.Listeners) 
       { 
        if (listener.IsThreadSafe) 
        { 
         listener.WriteLine(message); 
         if (!TraceInternal.AutoFlush) 
         { 
          continue; 
         } 
         listener.Flush(); 
        } 
        else 
        { 
         lock (listener) 
         { 
          listener.WriteLine(message); 
          if (TraceInternal.AutoFlush) 
          { 
           listener.Flush(); 
          } 
         } 
        } 
       } 

Nhưng quên này gọi Dấu vết xấu xí, sử dụng ETW Eventsource cho một much better tracing/logging

+0

Cảm ơn câu trả lời của bạn. Thật không may, tôi không thấy nó trả lời câu hỏi như thế nào. – Heinzi

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