【问题标题】:Which trace source is used by System.Diagnostics.Trace.WriteLine?System.Diagnostics.Trace.WriteLine 使用哪个跟踪源?
【发布时间】:2016-04-02 04:08:14
【问题描述】:

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

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

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

    var ts = new TraceSource("TraceTest");
    ts.TraceInformation("Something happened");
    

在我的 app.config 文件中,我可以为 everything 添加一个跟踪侦听器:

<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,但没有找到答案。

【问题讨论】:

  • 我不认为它使用源。它就像一种“全球资源”。两个并行的 API,可能是历史遗物。
  • @HenkHolterman:这很有可能(跟踪源是在 v2.0 中添加的),但我还没有找到证据。但是,也可以想象他们为这些“遗留”操作添加了特定来源。

标签: c# .net trace system.diagnostics


【解决方案1】:

我使用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();
                            }
                        }
                    }
                }

但是忘记这个丑陋的 Trace 调用,使用 ETW Eventsource 代替 much better tracing/logging

【讨论】:

  • 感谢您的回答。不幸的是,我看不出它是如何回答这个问题的。
猜你喜欢
  • 2015-09-05
  • 1970-01-01
  • 2023-03-23
  • 2012-07-09
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多