System.Diagnostics.Trace.WriteLine使用哪个跟踪源?

Hei*_*nzi 5 .net c# trace system.diagnostics

据我所知,有两种方法可以在.NET中创建跟踪消息.

  1. System.Diagnostics.Trace的静态方法:

    Trace.WriteLine("Something happened");
    
    Run Code Online (Sandbox Code Playgroud)
  2. 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.TraceMSDN页面,但没有找到答案.

mag*_*981 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();
                            }
                        }
                    }
                }
Run Code Online (Sandbox Code Playgroud)

但忘记这个丑陋的 Trace 调用,使用ETW Eventsource进行更好的跟踪/日志记录