2009-10-21 38 views
5

Tôi muốn ứng dụng của mình ghi ra các tệp theo dõi khác nhau có tên là MachineName_UserName_yyyymmdd_hhmmss.txt trong đó tên người dùng là người dùng hiện đã đăng nhập và thời gian là thời gian bắt đầu của ứng dụng. Trình nghe .Net TextWriterTraceListener chỉ hỗ trợ tên tệp được mã hóa cứng được chỉ định trong tệp cấu hình. Có cách nào để làm điều này mà không cần viết một trình theo dõi tùy chỉnh..Net Tên tệp theo dõi tùy chỉnh

Giả sử tôi đã viết một tùy chỉnh dấu vết người nghe, tôi đã thực hiện một tracelistener như thế này:

Imports System.Diagnostics 

Public Class MyCustomTraceListener 
    Inherits TextWriterTraceListener 

    Public Sub New() 
     'Need to do it this way as the Base constructor call has to be the first statement 
     MyBase.New(String.Format("AppNameTraceFile_{0}_{1}_{2}{3}{4}-{5}{6}{7}.txt", _ 
                 Environment.MachineName, _ 
                 Environment.UserName, _ 
                 DateTime.Now.ToString("yyyy"), _ 
                 DateTime.Now.ToString("MM"), _ 
                 DateTime.Now.ToString("dd"), _ 
                 DateTime.Now.ToString("HH"), _ 
                 DateTime.Now.ToString("mm"), _ 
                 DateTime.Now.ToString("ss"))) 
     Me.IndentSize = 4 
    End Sub 

End Class 

Trong tập tin cấu hình, tôi đã cấu hình nguồn dấu vết như thế này:

<system.diagnostics> 
    <trace autoflush="true"/> 
    <sources> 
     <source name="MyTraceSource" 
       switchName="mySwitch" 
       switchType="System.Diagnostics.SourceSwitch" > 
     <listeners> 
      <clear/> 
      <add name="MyTraceListener" 
      type="MyNameSpace.MyCustomTraceListener" 
      traceOutputOptions="ProcessId, DateTime, Callstack" /> 
     </listeners> 
     </source> 
    </sources> 
    <switches> 
     <add name="mySwitch" value="Warning" /> 
    </switches> 
    </system.diagnostics> 

Tôi đang tạo nguồn theo dõi như vậy:

Dim tsTraceSource As TraceSource = New TraceSource("MyTraceSource") 
tsTraceSource.TraceEvent(TraceEventType.Warning, 0, "warning message") 

Tuy nhiên, khi khởi động, tôi tiếp tục lỗi không thể tìm thấy loại "MyNameSpace.MycustomTraceListener".

Có ai thấy vấn đề ở đây không?

Cảm ơn.

Trả lời

1

Bạn không cần phải thông báo cho loại lắp ráp của mình?

<add name="MyTraceListener" 
    type="MyNameSpace.MyCustomTraceListener, MyAssembly" 
    traceOutputOptions="ProcessId, DateTime, Callstack" /> 
+0

Tác phẩm này. Cảm ơn bạn. – DevByDefault

0

Một cách tiếp cận mà tránh sự cần thiết cho một lớp học có nguồn gốc hoàn toàn:

Tạo một TextWriterTraceListener lớp cơ sở trong xml cấu hình của bạn, và sau đó khi khởi động, bạn có thể liệt kê bộ sưu tập Listeners để tìm thấy nó (có sẽ thường là một DefaultTraceListener và TextWriterTraceListener), sau đó chỉ cần đặt luồng ghi nhật ký của nó thành luồng mới.

+0

Cách tiếp cận này cũng hoạt động. Cảm ơn. – DevByDefault

0

Điều gì về việc thiết lập TraceListener của bạn trong mã? Nếu bạn vẫn muốn một số thông số nhất định, ví dụ: đăng nhập đường dẫn, để được trong app.config, xác định chúng trong phần appSettings và đọc chúng khi bạn tạo người nghe của bạn.

' VB 
Dim traceLog As New FileStream(traceFile, FileMode.OpenOrCreate) 
Dim traceListener As New TextWriterTraceListener(traceLog) 
Trace.Listeners.Add(traceListener) 

// C# 
FileStream traceLog = new FileStream(traceFile, FileMode.OpenOrCreate); 
TextWriterTraceListener traceListener = new TextWriterTraceListener(traceLog); 
Trace.Listeners.Add(traceListener); 

Mọi phần tử trong cấu hình tương ứng với API, vì vậy bạn sẽ có thể thực hiện mọi thứ bạn cần.

traceListener.TraceOutputOptions |= TraceOptions.Callstack | TraceOptions.DateTime | TraceOptions.ProcessId; 
+0

Có điều này sẽ làm việc, nhưng tôi thà đi với tất cả các khả năng cấu hình được cung cấp thông qua các tập tin cấu hình hơn là nhà nướng các ứng dụng để bắt chước các thiết lập tương tự và sau đó đặt chúng theo chương trình.Cấu hình tập tin chắc chắn là 'tiêu chuẩn' cách làm việc đó. Nhưng, tôi đồng ý rằng đây là một lựa chọn khả thi. Cảm ơn. – DevByDefault

0

bài cũ nhỏ nhưng chỉ trong trường hợp một người nào đó đi ngang qua - đây là một liên kết định chi tiết làm thế nào để thiết lập một cán phẳng tập tin dấu vết người nghe với ngày tháng và thời gian: http://msdn.microsoft.com/en-us/library/ff664768%28v=pandp.50%29.aspx

bài viết chuyên về Logging Application Block được tại http://msdn.microsoft.com/en-us/library/ff664569%28v=pandp.50%29.aspx

Bạn có thể phải thêm một NuGet gói trong Visual Studio gọi doanh nghiệp Thư viện - Logging Application Block

Tại nếu bạn muốn đi sâu vào Khối ứng dụng ghi nhật ký của Thư viện doanh nghiệp, đây là toàn bộ cuốn sách PDF trên đó: http://www.microsoft.com/en-us/download/details.aspx?id=41145

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