如何在net 4.0 c#项目中定义一个自动添加到所有TraceSource的默认TraceListener?
目前我必须列出我在App.config文件中使用的每个命名的TraceSource,如下所示:
<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>
我使用的SharedListener应该接收来自所有TraceSources的所有输出,除非另有说明。使用上面的语法,这需要为每个TraceSource手动输入。
每当我使用新的TraceSource引入新类时,我都必须更新App.Config。如果多个程序使用该程序集,我必须更新多个App.Config。更新这些条目时的拼写错误不会产生任何错误,它只会默默地省略正确来源的所有跟踪输出。
有没有办法可以通过App.config设置默认的TraceListener,这样如果我想偏离默认值,我只需要命名特定的TraceSources?
答案 0 :(得分:3)
我没有找到一个很好的解决方案,所以我所做的至少是集中创建TraceSources。然后我可以添加任何跟踪&#39; app.config中的侦听器对这些新创建的源:
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;
现在,我添加到<system.diagnostics> \ <trace> \ <listeners>
的所有侦听器都将添加到我使用此代码创建的所有跟踪源中。
答案 1 :(得分:1)
您可以在机器配置中添加默认侦听器,但这会影响比您想要影响的更多应用程序。