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

时间:2015-12-28 09:59:26

标签: c# .net trace system.diagnostics

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

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

    Trace.WriteLine("Something happened");
    
  2. System.Diagnostics.TraceSource的实例方法:

    var ts = new TraceSource("TraceTest");
    ts.TraceInformation("Something happened");
    
  3. 在我的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,但没有找到答案。

1 个答案:

答案 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