据我所知,有两种方法可以在.NET中创建跟踪消息。
System.Diagnostics.Trace的静态方法:
Trace.WriteLine("Something happened");
System.Diagnostics.TraceSource的实例方法:
var ts = new TraceSource("TraceTest");
ts.TraceInformation("Something happened");
在我的app.config文件中,我可以为所有内容添加跟踪侦听器:
<system.diagnostics>
<trace>
<listeners>
...
</listeners>
</trace>
</system.diagnostics>
或针对一个特定的跟踪源:
<system.diagnostics>
<sources>
<source name="...">
<listeners>
...
</listeners>
</source>
</sources>
</system.diagnostics>
我的问题
如果我使用第一种方法(System.Diagnostics.Trace的静态方法),使用哪个跟踪源名称?
我已经检查了MSDN page of System.Diagnostics.Trace,但没有找到答案。
答案 0 :(得分:3)
我使用JustDecompile检查了Trace.Writeline的来源,它会枚举所有侦听器并将消息发送给所有人:
foreach (TraceListener listener in TraceInternal.Listeners)
{
if (listener.IsThreadSafe)
{
listener.WriteLine(message);
if (!TraceInternal.AutoFlush)
{
continue;
}
listener.Flush();
}
else
{
lock (listener)
{
listener.WriteLine(message);
if (TraceInternal.AutoFlush)
{
listener.Flush();
}
}
}
}
但是忘记这个丑陋的跟踪调用,使用ETW Eventsource作为much better tracing/logging