Hei*_*nzi 5 .net c# trace system.diagnostics
据我所知,有两种方法可以在.NET中创建跟踪消息.
System.Diagnostics.Trace的静态方法:
Trace.WriteLine("Something happened");
Run Code Online (Sandbox Code Playgroud)System.Diagnostics.TraceSource的实例方法:
var ts = new TraceSource("TraceTest");
ts.TraceInformation("Something happened");
Run Code Online (Sandbox Code Playgroud)在我的app.config文件中,我可以为所有内容添加跟踪侦听器:
<system.diagnostics>
<trace>
<listeners>
...
</listeners>
</trace>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)
或者对于一个特定的跟踪源:
<system.diagnostics>
<sources>
<source name="...">
<listeners>
...
</listeners>
</source>
</sources>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)
我的问题
如果我使用第一种方法(System.Diagnostics.Trace的静态方法),使用哪个跟踪源名称?
我已经检查了System.Diagnostics.Trace的MSDN页面,但没有找到答案.
我使用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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但忘记这个丑陋的 Trace 调用,使用ETW Eventsource进行更好的跟踪/日志记录