自动将跟踪侦听器加载到所有新的跟踪源
本文关键字:跟踪 加载 侦听器 | 更新日期: 2023-09-27 18:32:51
我正在转换一些代码以使用Microsoft跟踪。我想要的是定义一个项目中的所有侦听器,然后从其他程序集使用它们,而不必在那里显式加载它们。
澄清一下,这就是我现在正在做的事情:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add name="myListener" type="ConsoleApplication4.LogListener, ConsoleApplication4"/>
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
在 C# 代码中:
var b = Trace.Listeners;
TraceSource tr = new TraceSource("Blah", SourceLevels.All);
tr.Listeners.Add(b["myListener"]);
tr.TraceEvent(TraceEventType.Warning, 5, "Hello");
我希望myListener
自动添加到我创建的任何新跟踪源中,而无需像现在那样查找它。这可能吗?
在 config 中定义跟踪源及其侦听器:
<system.diagnostics>
<sources>
<source name="Blah" switchValue="Warning">
<listeners>
<add name="myListener" />
</listeners>
</source>
</sources>
<!-- Note these are in sharedListeners rather than trace -->
<sharedListeners>
<add name="myListener" ... />
</sharedListeners>
<!-- Autoflush still works as expected -->
<trace autoflush="true" />
</system.diagnostics>
然后按照您已经存在的方式在代码中构造 TraceSource(它的跟踪级别将被配置中的switchValue
覆盖),不要向其添加任何侦听器并正常登录。