2014-07-01 16 views
5

Làm cách nào để xác định một TraceListener mặc định, được tự động thêm vào tất cả các TraceSources, trong một dự án net 4.0 C#?Thêm một TraceListener mặc định cho tất cả các TraceSources trong App.config

Hiện nay tôi phải liệt kê mọi TraceSource tên tôi sử dụng trong file App.config như thế này:

<system.diagnostics> 
    <sharedListeners> 
     <add name="MyListener" type="MyListenerType,MyAssemblyName" /> 
    </sharedListeners> 
    <sources> 
     <source name="Class1" switchValue="All"> 
     <listeners><add name="MyListener"></add></listeners> 
     </source> 
     <source name="Class2" switchValue="All"> 
     <listeners><add name="MyListener"></add></listeners> 
     </source> 
     <source name="Class3" switchValue="All"> 
     <listeners><add name="MyListener"></add></listeners> 
     </source> 
     ... repeat for a gazillion classes ... 
    </sources> 
    <system.diagnostics> 

Tôi đang sử dụng một SharedListener rằng sẽ nhận được tất cả các kết quả đầu ra từ tất cả các TraceSources, trừ trường hợp quy định. Với cú pháp trên, điều này đòi hỏi một mục nhập thủ công cho mỗi TraceSource.

Bất cứ khi nào tôi giới thiệu một lớp học mới với một TraceSource mới, tôi phải cập nhật App.Config. Nếu nhiều chương trình sử dụng assembly đó, tôi phải cập nhật nhiều App.Config. Lỗi chính tả trong khi cập nhật các mục nhập này sẽ không tạo ra bất kỳ lỗi nào, nó sẽ chỉ lặng lẽ bỏ qua tất cả các đầu ra theo dõi từ nguồn chính xác.

Có cách nào tôi có thể đặt TraceListener mặc định thông qua App.config, để tôi chỉ phải đặt tên cho TraceSources cụ thể nếu tôi muốn đi chệch khỏi mặc định?

Trả lời

1

Bạn có thể thêm người nghe mặc định vào cấu hình máy, nhưng điều đó sẽ ảnh hưởng đến nhiều ứng dụng hơn bạn muốn ảnh hưởng.

+0

I * do * đã chia sẻ Người nghe. Trình nghe 'MyListener' trong ví dụ của tôi là một người nghe được chia sẻ, nếu không tôi không thể tham chiếu đến nó bằng tên khi thêm nó. (Tôi sẽ cố gắng làm điều này rõ ràng hơn trong câu hỏi). Nhưng với cấu hình hiện tại, tôi vẫn cần phải thêm người nghe được chia sẻ này vào * mọi TraceSource * đơn lẻ. Tôi đang tìm kiếm một cách để tránh lặp lại mọi tên TraceSource trong App.Config, trong khi mạo hiểm mất tích hoặc lỗi chính tả. – HugoRune

+0

Xin lỗi. Sau đó, bạn cần phải sửa đổi machine.config, hoặc làm điều đó trong mã khi khởi động ứng dụng, nhưng điều đó đòi hỏi sự phản chiếu để lấy danh sách riêng của các nguồn theo dõi để thêm người nghe vào tất cả chúng. – MatthewMartin

3

Tôi không tìm thấy giải pháp tuyệt vời cho điều này, vì vậy điều tôi đã làm ít nhất là tập trung vào việc tạo TraceSources. Sau đó, tôi có thể thêm bất kỳ người nghe 'dấu vết' trong app.config để các nguồn mới được tạo ra:

TraceSource toReturn = new TraceSource(name, filterLevel); 

//remove the default trace listener; don't 'clear' the listeners entirely, because that would undo changes made in app.config; this is a decent compromise 
toReturn.Listeners.Remove("Default"); 

//add all global trace listeners from the app.config 
toReturn.Listeners.AddRange(Trace.Listeners); 

return toReturn; 

Bây giờ bất kỳ người nghe tôi thêm vào <system.diagnostics> \ <trace> \ <listeners> sẽ được thêm vào tất cả các nguồn trace tôi tạo với mã này.

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