システムで使用可能なすべてのイベント ソースをリッスンする ETW リスナーを開発しています。
Q1: 以下のサンプル コードを見つけてください。
providerName = "ETW-TEST-APPLICATION";
sessionName = "ETW-TEST-APPLICATION";
using (var session = new TraceEventSession(sessionName, null))
{
try
{
session.StopOnDispose = true;
session.BufferSizeMB = 100;
Console.CancelKeyPress +=
delegate(object sender, ConsoleCancelEventArgs e) { session.Dispose(); };
using (source = new ETWTraceEventSource(sessionName, TraceEventSourceType.Session))
{
var parser = new DynamicTraceEventParser(source);
parser.AddDynamicProvider(new ProviderManifest(Environment.CurrentDirectory +
"\\ETWApplicationRegister." +
providerName +
".etwManifest.man"));
parser.All += delegate(TraceEvent data)
{
Console.WriteLine("--------------------------------------------------------------");
Console.WriteLine("ProviderName : " + data.ProviderName);
Console.WriteLine("ProviderGuid : " + data.ProviderGuid);
Console.WriteLine("EventID : " + data.ID);
Console.WriteLine("Level : " + data.Level);
Console.WriteLine("Channel : " + data.Channel);
Console.WriteLine("Task : " + data.Task);
Console.WriteLine("TaskName : " + data.TaskName);
Console.WriteLine("TimeStamp : " + data.TimeStamp);
Console.WriteLine("FormattedMessage : " + data.FormattedMessage);
Console.WriteLine("PayLoad : " + data.PayloadByName("jsonArgs"));
Console.WriteLine("--------------------------------------------------------------");
};
session.EnableProvider(providerGuid);
source.Process(); //On execution of this statement system listens to the events
}
}
}
このコードは、「ETW-TEST-APPLICATION」という 1 つのイベント ソースに適しています。このリスナーを複数のイベント ソース「ETW-TEST-APPLICATION2」、「ETW-TEST-APPLICATION3」などで使用したいと考えています。
これを実現するために利用できるオプションについて教えてください。スレッドで試しましたが、うまくいきませんでした。
Q2: 複数の session.EnableProvider を使用できるかどうかも教えてください。情報メッセージとエラー メッセージのみを有効にして、警告メッセージを無視したいです。 session.EnableProvider(providerGuid,TraceEventLevel.Informational); session.EnableProvider(providerGuid,TraceEventLevel.Error);