【问题标题】:Why call stack info is absent for my EventLogTraceListener instance?为什么我的 EventLogTraceListener 实例没有调用堆栈信息?
【发布时间】:2016-12-24 00:45:00
【问题描述】:

C# 6.0、.NET Framework 4.6.1、调试模式。

我为 EventLogTraceListener 实例设置了 TraceOptions.Callstack 值,但在 Windows 事件查看器中看不到调用堆栈。

这是我的简单代码:

public static string GetMsgHeaders() {

    string currentMethodName = MethodBase
        .GetCurrentMethod().Name;

    Console.Out.WriteLine("The {0} method was called!",
        currentMethodName);

    if (!EventLog.SourceExists("sharp_sandbox")) {
        EventLog.CreateEventSource("sharp_sandbox",
            "Application");
    }

    EventLogTraceListener listener = new
        EventLogTraceListener("sharp_sandbox");

    listener.TraceOutputOptions = TraceOptions.DateTime
        | TraceOptions.Callstack;

    Trace.Listeners.Add(listener);
    Trace.Write("Trace.Write");
    Trace.WriteLine("Trace.WriteLine");
    Trace.TraceWarning("Trace.TraceWarning");
    Trace.TraceError("Trace.TraceError");
    Trace.TraceInformation("Trace.TraceInformation");

    listener.Close();

    return "ABCDEF";
}

但我得到的信息没有调用堆栈,例如:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
    <System>
        <Provider Name="sharp_sandbox" /> 
        <EventID Qualifiers="0">0</EventID> 
        <Level>4</Level> 
        <Task>0</Task> 
        <Keywords>0x80000000000000</Keywords> 
        <TimeCreated SystemTime="2016-08-17T09:48:40.367843800Z" /> 
        <EventRecordID>13778</EventRecordID> 
        <Channel>Application</Channel> 
        <Computer>Win10x64-VS.spb.gpsm.ru</Computer> 
        <Security /> 
    </System>
    <EventData>
        <Data>Trace.TraceInformation</Data> 
    </EventData>
</Event>

为什么没有调用堆栈信息?

【问题讨论】:

    标签: c# .net logging trace tracelistener


    【解决方案1】:

    不幸的是,EventLogTraceListener 没有使用跟踪选项。它声称它会吐出太多数据!

    https://msdn.microsoft.com/en-us/library/a10k7w6c(v=vs.110).aspx

    在备注部分说明。

    【讨论】:

      【解决方案2】:

      您只需添加一个简单的侦听器,将跟踪或调试输出定向到 EventLog。在 App.config 文件中的 &lt;configuration&gt; &lt;/configuration&gt; 之间的某处插入 &lt;system.diagnostics&gt; 配置。

      <system.diagnostics>
            <trace autoflush="false" indentsize="4">
              <listeners>
                <add name="myListener"
                  type="System.Diagnostics.EventLogTraceListener"
                  initializeData="TraceListenerLog" />
              </listeners>
            </trace>
       </system.diagnostics>
      

      上面的代码将一个名为 myListener 的 EventLogTraceListener 对象添加到 Trace.Listeners 集合中。 initializeData 参数指定要传递给 EventLogTraceListener(String) 构造函数的事件日志源的名称。有关 EventLogTraceListener 类的更多详细信息,请访问 Google。

      【讨论】:

        猜你喜欢
        • 2013-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-10
        • 1970-01-01
        • 2020-10-24
        • 2011-11-20
        相关资源
        最近更新 更多