我正在使用以下代码成功读取“ ASP.NET事件”和其他已注册提供商的ETW日志。
using (var session = new TraceEventSession("TraceSessionTest"))
{
// Set up Ctrl-C to stop the session
Console.CancelKeyPress +=
(object s, ConsoleCancelEventArgs args) => session.Stop();
session.EnableProvider("ASP.NET Events");
using (var source = new ETWTraceEventSource("ObserveProcs", TraceEventSourceType.Session))
{
Console.WriteLine("Listening");
// Hook up the parser that knows about EventSources
DynamicTraceEventParser dynamicTraceEventParser = new DynamicTraceEventParser(source);
dynamicTraceEventParser.All += delegate (TraceEvent traceEvent2)
{
Console.WriteLine("\n -------- Event: {0}", traceEvent2);
};
source.Process();
}
}
我想做的是跟踪某些应用程序的传出请求。 为此,我将以下配置添加到该特定应用程序配置文件中。
<system.diagnostics>
<!--<trace autoflush="true"/>-->
<trace autoflush="true" indentsize="4">
<listeners>
<remove name="Default" />
<add name="EtwListener"
type="System.Diagnostics.Eventing.EventProviderTraceListener, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
initializeData="{BDE5930E-34C9-4E2F-A6EC-89E1F1EA69CC}" />
</listeners>
</trace>
<sources>
<source name="System.Net">
<listeners>
<!--<add name="MyTraceFile"/>
<add name="MyConsole"/>-->
<add name="ETWListener" initializeData="{BDE5930E-34C9-4E2F-A6EC-89E1F1EA69CC}"
type="System.Diagnostics.Eventing.EventProviderTraceListener, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, Callstack"/>
</listeners>
</source>
</sources>
<sharedListeners>
<!--<add name="MyTraceFile" type="System.Diagnostics.TextWriterTraceListener" initializeData="System.Net.trace.log" traceOutputOptions="Timestamp"/>
<add name="MyConsole" type="System.Diagnostics.ConsoleTraceListener"/>-->
<add name="ETWListener" type="System.Diagnostics.Eventing.EventProviderTraceListener, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
initializeData="{BDE5930E-34C9-4E2F-A6EC-89E1F1EA69CC}" />
</sharedListeners>
<switches>
<add name="System.Net" value="Information"/>
</switches>
我可以使用以下命令用logman查看跟踪日志;
logman start "hellosession" -p '{BDE5930E-34C9-4E2F-A6EC-89E1F1EA69CC}' -o "hello.etl" -ets
--Made some request from the application to trigger some HttpWebRequest operation.
logman stop "hellosession" -ets
tracerpt hello.etl -of csv -o hello1.csv
但是我无法查看/读取带有代码的日志(更改提供者guid的代码-在initializeData上声明)
session.EnableProvider(new Guid("{BDE5930E-34C9-4E2F-A6EC-89E1F1EA69CC}"), TraceEventLevel.Verbose);
这不是注册的提供程序,因此我认为这就是为什么我无法通过“ logman查询提供程序”看到它的提供程序列表。
我还需要从代码中订阅EventProviderTraceListener吗?
更新:我可以得到类似以下的异常跟踪日志:
<Event MSec="447529,4150" PID="22260" PName= "" TID="20412" IsClassic="False" ProviderName="Provider(bde5930e-34c9-4e2f-a6ec-89e1f1ea69cc)" FormattedMessage="[20412] Exception in HttpWebRequest#2155438::GetResponse - The remote server returned an error: (400) Bad Request.."/>