EtwStream + LINQPad を使う
LINQPad を利用しているのであれば、EtwStream.LinqPad 拡張を使うと簡単にログを取得できます。LINQpad の NuGet インストール機能は Developer エディション以上が必要ですが、手作業で参照アセンブリを登録するのであれば Free エディションでも動作させることはできます。
![]() | |
LINQPad でログを表示 |
追加した参照アセンブリ
(メニューの Query ⇒ References and Properties から追加)EtwStream.Core.dll
EtwStream.LinqPad.dll
Microsoft.Diagnostics.Tracing.TraceEvent.dll
System.Reactive.Core.dll
System.Reactive.Interfaces.dll
System.Reactive.Linq.dll
追加した名前空間
(メニューの Query ⇒ Namespace imports から追加)EtwStream
発行したクエリ
ObservableEventListener.FromTraceEvent("プロバイダ名またはID").DumpWithColor();
C#でビューアーを自作してみた
EtwStream.Core を利用した簡単なビューアーを作成してみました。.NET Framework 4.6 フォームアプリケーションです。
GitHub mxProject/EtwLogViewer
https://github.com/mxProject/EtwLogViewer
![]() |
自作ビューアーでログを表示 |
表示対象プロバイダのリストや表示対象項目は XML 形式の設定ファイルで指定します。
表示対象に指定できる項目は、TraceEvent クラスの各プロパティと任意のペイロードです。
- TraceEvent クラスの public プロパティ。
- ペイロード名。ペイロードの項目名はプロバイダによって異なりますので、表示したい項目名を直接指定する方法としました。Field の Name の先頭文字がドットである場合はペイロードであるとみなします。
- Payloads:ペイロードの名前と値を連結した文字列。書式は name1=value1; name2=value2; … です。
- ProviderFriendlyName:設定ファイルのプロバイダ情報で設定した FriendlyName の値。
<?xml version="1.0" encoding="shift_jis"?> <EtwLogViewerConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!-- ETW Providers --> <Providers> <Provider FriendlyName="mxLogger" Name="mxProject.Logging.Loggers.ETWLogger" ID="{FAE1403F-2B75-493D-96C4-12B330928A97}" /> <Provider FriendlyName="NLog" Name="LowLevelDesign-NLogEtwSource" /> <Provider FriendlyName=".NET CLR" ID="{E13C0D23-CCBC-4E12-931B-D9CC2EEE27E4}" /> </Providers> <!-- Known payloads --> <KnownPayloads> <string>LoggerName</string> <string>Sequence</string> <string>Time</string> <string>Message</string> <string>MemberName</string> <string>FilePath</string> <string>Line</string> </KnownPayloads> <!-- Visible fields --> <!-- To specify the payload, add a dot before the item name. ex) .Message --> <Fields> <Field Name="TimeStamp" Width="120" /> <Field Name="ProviderFriendlyName" Width="120" /> <Field Name="ProviderName" Width="120" /> <Field Name="FormattedMessage" Width="200" /> <Field Name=".LoggerName" Width="100" /> <Field Name=".Message" Width="200" /> <Field Name=".Sequence" Width="70" /> <Field Name=".Time" Width="120" /> <Field Name=".MemberName" Width="100" /> <Field Name=".FilePath" Width="100" /> <Field Name=".Line" Width="50" /> <Field Name="Payloads" Width="300" /> </Fields> </EtwLogViewerConfig>
Windows に登録されているプロバイダ
非常に多くのプロバイダが登録されています。それらの Guid を指定すれば、出力されているログの内容を確認することができます。
tech.guitarrapc.com - Event Tracing for Windows (ETW) の トレースプロバイダーリストを取得してみる
http://tech.guitarrapc.com/entry/2016/01/07/100248
0 件のコメント:
コメントを投稿