2012-11-08 29 views
15

Các mã sau đây:Format của Tracing đầu ra trong System.Diagnostics.TraceSource

static void Main(string[] args) 
{ 
    TraceSource ts = new TraceSource("MyApplication"); 

    ts.Switch = new SourceSwitch("MySwitch"); 
    ts.Switch.Level = SourceLevels.All; 

    ts.Listeners.Add(new TextWriterTraceListener(Console.Out)); 

    ts.TraceInformation("Hello World"); 
    Console.ReadKey(); 
} 

tạo đầu ra sau đây:

MyApplication Thông tin: 0: Hello World

Phần "Thông tin MyApplication: 0:" ở đầu đầu ra dấu vết đến từ chính lớp TraceSource.

Tuy nhiên, tôi cần có dấu thời gian ở đầu dòng và tôi cũng muốn thay đổi "Thông tin" thành "Thông tin".

Có cách nào để có được tự do hơn trong dấu vết đầu ra như vậy mà tôi có thể cấu hình nó để được như:

13:03:00 - MyApplication Thông tin: Hello World

Tôi đã thử một vài giờ nhưng không thành công. Dù tôi làm gì, ở đầu dòng đầu ra, luôn luôn có thông tin "MyApplication Information: 0: Hello World" được xác định trước.

Tài liệu MSDN cũng không tiết lộ bất kỳ thông tin hữu ích nào.

Trả lời

5

Đặt thuộc tính TraceOutputOptions trên trình theo dõi. Định dạng được xác định trước, nhưng bạn có thể chọn tham gia cho các phần dữ liệu bổ sung được xác định bởi TraceOptions enum.

+1

Đã thử, nhưng có vẻ không phải là giải pháp. Với TraceOutputOptions, tôi chỉ có thể chỉ định ** các phần tử ** bổ sung nào tôi muốn trong đầu ra của mình. Nhưng thực ra tôi muốn ** ít hơn **! ;) – Flagg1980

+7

Tạo trình theo dõi của riêng bạn kế thừa từ trình nghe văn bản và ghi đè các phương thức thực hiện định dạng. Sử dụng trình nghe đó thay thế. – fsimonazzi

1

Có thể hơi muộn nhưng nếu bạn muốn có giải pháp dễ dàng và linh hoạt, bạn nên xem dự án Essentials Diagnostics trên CodePlex (cũng có sẵn through NuGet).

Nó định nghĩa một phạm vi rộng của người nghe (với định dạng tùy chỉnh cho phép) xuất ra bàn điều khiển, văn bản và tệp XML, nhật ký sự kiện, email, v.v ... và đi kèm với mẫu cấu hình.

3

TraceSource.TraceInformation kết thúc bằng cách gọi TraceListener.TraceEvent trên mỗi trình nghe có thêm tiêu đề. May mắn thay, TraceListener có phương thức WriteLine mà bạn có thể sử dụng để tạo đầu ra tùy chỉnh.

static void Main(string[] args) 
{ 
    TraceSource ts = new TraceSource("MyApplication"); 

    ts.Switch = new SourceSwitch("MySwitch"); 
    ts.Switch.Level = SourceLevels.All; 

    ts.Listeners.Add(new TextWriterTraceListener(Console.Out)); 

    for (int i = 0; i < ts.Listeners.Count; i++) 
    { 
     var listener = ts.Listeners[i]; 

     listener.WriteLine(
      string.Format("{0} - {1} Info: {2}", 
      DateTime.Now.ToString("HH:mm:ss"), ts.Name, "Hello World")); 
     listener.Flush(); 
    } 
    Console.ReadKey(); 
} 

Output:

13:52:05 - MyApplication Thông tin: Hello World

4

Coming vào cuối năm cũng nhưng trong những vùng đất khác trường hợp ai đó ở đây ...

Tôi thích giữ đơn giản. Tôi sử dụng một phương pháp Trace tĩnh trong App.cs của tôi, nó liên kết với một TraceSource mà tôi tạo lúc khởi động. Điều này cho phép tôi truy cập nó trong suốt ứng dụng của tôi và giữ cho app.config đơn giản:

public static void Trace(TraceEventType eventType, string message) 
{ 
    if (_TraceSource.Switch.ShouldTrace(eventType)) 
    { 
     string tracemessage = string.Format("{0}\t[{1}]\t{2}", DateTime.Now.ToString("MM/dd/yy HH:mm:ss"), eventType, message); 
     foreach (TraceListener listener in _TraceSource.Listeners) 
     { 
      listener.WriteLine(tracemessage); 
      listener.Flush(); 
     } 
    } 
} 

Ứng dụng của tôi.mục cấu hình:

<system.diagnostics> 
    <sources> 
     <source name="mytracesource" switchValue="All"> 
     <listeners> 
      <add name="mytracelistener" 
       type="System.Diagnostics.TextWriterTraceListener" 
       initializeData="trace.log"> 
      </add> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 
Các vấn đề liên quan