Using EventProviderTraceListener
In .Net framework 3.5, there is a new trace listener, EventProviderTraceListener, which you can use to do ETW tracing. There are good introduction and some intimidating tips. It took me a while to figure out that, to do a simple ETW trace, you can just configure it like a normal trace listener by having an app config file like:
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="myListener" type="System.Diagnostics.Eventing.EventProviderTraceListener, System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="{BF8671E1-2B70-41f3-AE0C-993C6A7D6763}" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
I put the event provider ID as initializeData and it seems to work. With that config file, you can simply use Trace.WriteLine("my message").
To start a trace session, do:
logman start mysession -p {BF8671E1-2B70-41f3-AE0C-993C6A7D6763} -o mytest.etl -ets
After you are done with tracing, you can stop by
logman stop mysession -ets
Then you can use tracerpt to dump the log to readable format.
tracerpt mytest.etl
ETW tracing is very customizable, but for doing simple tracing for debugging, it seems logging a message is enough. One advantage of using ETW tracing is performance. I did some simple measurement with a loop like:
Stopwatch timePerParse = Stopwatch.StartNew();
for (int i = 0; i < 50000; ++i)
{
Trace.WriteLine("this is using Trace");
}
timePerParse.Stop();
MessageBox.Show(timePerParse.ElapsedMilliseconds.ToString());
The result is like (on a 2.4 GHz machine):
Default trace listener with DBGView.exe |
14196ms |
TextWriterTraceListener |
211ms |
EventProviderTraceListener |
77ms |
Note: EventProviderTraceListener currently is only supported on Vista.
Keywords: ETW tracing EventProviderTraceListener System.Diagnostics.Eventing.EventProviderTraceListener logman.exe tracerpt.exe
Comments
- Anonymous
April 15, 2008
PingBack from http://microsoftnews.askpcdoc.com/?p=2728