2012-06-27 32 views
10

Tôi đang cố gắng hiểu cách Tracing hoạt độngHiểu cách Trace hoạt động trong C#

Tôi đã tạo một dự án web mới đơn giản. Đây là mã của tôi mà tôi có thể sử dụng

// Create a trace listener for the event log. 
EventLogTraceListener myTraceListener = new EventLogTraceListener("myEventLogSource"); 

// Add the event log trace listener to the collection. 
Trace.Listeners.Add(myTraceListener); 

// Write output to the event log. 
Trace.WriteLine("Test output"); 

Tôi lấy sự giúp đỡ từ này msdn link

Các thiết lập trong web.config của tôi là như sau

<system.diagnostics> 
<trace autoflush="false" indentsize="4"> 
    <listeners> 
    <add name="myListener" 
     type="System.Diagnostics.EventLogTraceListener" 
     initializeData="TraceListenerLog" /> 
    </listeners> 
</trace> 
</system.diagnostics> 

Tuy nhiên khi tôi chạy mã này, Tôi không biết nơi đăng nhập này đang xảy ra tôi kiểm tra xem EVENT, dưới "Đăng nhập ứng dụng và dịch vụ" Tôi đã mong đợi một số bản ghi mới được tạo ra với tên "myEventLogSource" nhưng điều đó đã không xảy ra.

Xin vui lòng bất cứ ai có thể giải thích cho tôi cách thức hoạt động này.

+0

Bạn có thể cho chúng tôi biết điều gì sẽ xảy ra khi bạn thay đổi 'autoflush' thành' true' trong cấu hình? Hoặc thuộc tính 'AutoFlush' của lớp' Dấu vết'. Ngoài ra, hãy gọi 'Flush' sau khi viết. Ngoài ra, cấu hình XML giúp bạn tiết kiệm từ việc cần tạo/cấu hình người nghe trong mã. –

+0

Tạo nguồn sự kiện mới yêu cầu quyền quản trị viên. Chạy lệnh này trong dấu nhắc lệnh quản trị đầu tiên 'eventcreate/ID 1/L APPLICATION/T INFORMATION/SO myEventLogSource/D" Tạo myEventLogSource "' – adrianm

Trả lời

7

Dưới kiểm tra Nhật ký ứng dụng nếu bạn có hai Nguồn đã ghi vào Nhật ký ứng dụng, một là TraceListenerLog và một nguồn khác là myEventLogSource. Nhật ký mới sẽ không được tạo, cả hai đều sẽ sử dụng Nhật ký ứng dụng. Nếu bạn muốn tạo một bản ghi mới và bạn muốn viết dấu vết đầu ra với nó, bạn có thể làm điều đó như thế này (tất nhiên, đăng nhập tên không phải bằng tên nguồn):

 string logSource = "_myEventLogSource"; 
     if (!EventLog.SourceExists(logSource)) 
      EventLog.CreateEventSource(logSource, logSource); 

     EventLogTraceListener myTraceListener = new EventLogTraceListener(logSource); 

     // Add the event log trace listener to the collection. 
     System.Diagnostics.Trace.Listeners.Add(myTraceListener); 

     // Write output to the event log. 
     System.Diagnostics.Trace.WriteLine("Test output"); 

Ngay cả khi nguồn không tồn tại, thông tin theo dõi sẽ được ghi vào nhật ký sự kiện bên dưới Nhật ký ứng dụng với tên nguồn bạn đã chuyển cho hàm tạo EventLogTraceListener.

+0

Tôi sẽ thử điều này, nhưng nếu nguồn sự kiện không tồn tại thì mã sẽ (trong câu hỏi) ném một lỗi? – Yasser

+0

Nó sẽ kiểm tra xem nguồn có tồn tại không (EventLog.SourceExists (logName)), nếu nó không tồn tại, nó sẽ được tạo (EventLog.CreateEventSource (logName, logName)). Hãy thử nó, nếu bạn có một ứng dụng web, bạn có thể đặt mã này vào, giả sử, trình xử lý sự kiện Page_Load. Sau khi chạy Trình xem sự kiện mở này một lần nữa để có danh sách các nhật ký hiện có được làm mới. –

+1

Ngay cả khi nguồn không tồn tại, thông tin theo dõi sẽ được ghi vào nhật ký sự kiện bên dưới Nhật ký ứng dụng với tên nguồn bạn đã chuyển cho hàm tạo EventLogTraceListener. –

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