为什么我的EventLogTraceListener实例缺少调用堆栈信息?

时间:2016-08-17 11:22:35

标签: c# .net logging trace tracelistener

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

我为TraceOptions.Callstack实例设置了EventLogTraceListener值,但我在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>

为什么不存在调用堆栈信息?

2 个答案:

答案 0 :(得分:0)

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

<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)构造函数的事件日志源的名称。有关详细信息,请参阅Google的EventLogTraceListener类。

答案 1 :(得分:0)

不幸的是,EventLogTraceListener没有使用Trace Options。它声称它会吐出太多数据!

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

在备注部分说明。