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>
为什么不存在调用堆栈信息?
答案 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
在备注部分说明。