2012-02-07 23 views
5

Tôi đang sử dụng System.Diagnostics.TraceSource để ghi nhật ký và một trong những người nghe của tôi là một TextWriterTraceListener. Trong mồi truy tìm here nó đặt này như sau:Làm cách nào để dừng một TextWriterTraceListener khỏi việc thêm app.config?

<listeners> 
    <add initializeData="output.txt" 
     type="System.Diagnostics.TextWriterTraceListener" 
     name="myLocalListener" /> 
</listeners> 

Vấn đề là điều này sẽ luôn luôn gắn liền với các output.txt. Làm thế nào để bạn thay đổi điều này thành ghi đè trong tệp cấu hình?

lập trình người nghe tôi muốn là một:

new TextWriterTraceListener(new StreamWriter("output.txt", false)); 

Trả lời

2

Giải pháp đơn giản nhất là tự làm.

Tôi khuyên bạn nên kế thừa từ TextWriterTraceListener và trong hàm tạo của bạn đặt cơ sở Writer cho những gì bạn đã đề xuất: new StreamWriter("output.txt", false).

Một số mẫu mã:

public class MyTextWriterTraceListener : TextWriterTraceListener 
{ 
    public MyTextWriterTraceListener(string logFileName) 
     : base(logFileName) 
    { 
     base.Writer = new StreamWriter(logFileName, false); 
    } 
} 

này cho phép bạn lấy thông số initializeData từ một tập tin cấu hình để chỉ định tên của tập tin, hoặc chỉ định một nếu tạo ra trong mã.

+0

Tôi thích ý tưởng, nhưng khi xác định loại trong App.config 'type = MyNamespace.MyTextWriterTraceListener' chương trình bị treo. –

+0

Thú vị. Tôi đã thực hiện một người nghe tùy chỉnh tương tự như ngày hôm trước và không có vấn đề gì. Một chút mà tôi phải thêm vào app.config của tôi là 'type =" MyNamespace.MyTextWriterTraceListener, AssemblyNameContainingListener "'. Ngoài ra hãy chắc chắn rằng các hội đồng có chứa nó đang được sao chép, tôi đã có một bài kiểm tra đơn vị tham chiếu nó trong app.config nhưng không phải trong mã để Visual Studio là đủ hữu ích để không sao chép nó địa phương. –

+0

Cảm ơn, tôi đã rời khỏi tên lắp ráp. –

1

Tôi biết điều này không trực tiếp trả lời câu hỏi của bạn, nhưng sử dụng NLog để thay thế. Nó thực hiện nhiều công cụ hơn so với chẩn đoán ngoài hộp về các tùy chọn ghi nhật ký và nó thực sự dễ sử dụng.

+3

-1 không trả lời câu hỏi. OP không yêu cầu các giải pháp ghi nhật ký thay thế mà là cách cấu hình một lựa chọn. –

+1

@JonPeterson Tôi không đồng ý. Có một cơ hội hợp lý rằng câu trả lời này sẽ hữu ích cho ai đó, ở đâu đó. – Holf

0

Thậm chí đơn giản hơn, chỉ cần nói với TestWriterTraceListener để không thêm các tập tin:

TextWriterTraceListener twtl = new TextWriterTraceListener(new StreamWriter(@"<path to my logfile>", false)); 

Bằng cách chọn false logfile được ghi đè mỗi khi bạn khởi tạo TextWriterTraceListener.

+0

Cảm ơn bạn, nhưng tôi đã tìm kiếm một giải pháp cho phép đặc điểm kỹ thuật của người viết trong cấu hình. Giải pháp của bạn là ở dưới cùng của câu hỏi là hành vi tôi muốn nhân rộng :) –

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