我一直在尝试在.net 4.5中使用ETW。我有一个使用EventSource编写消息的小型示例应用程序,但是,我很难理解如何创建自己的ETW控制器和消费者应用程序。
我使用PerfView来启用并查看eventsources是否正常工作,以及在同一个程序集中添加EventListners。现在我希望能够拥有自己的自定义“PerfView”来管理和查看实时跟踪。我只是无法弄清楚如何绑定到EventSources。
答案 0 :(得分:1)
查看PerfMonitor和构建它的TraceEvent类。
PerfMonitor是一个包装器应用程序,它可以控制源并消耗它们的输出,这样你就可以看到工作原理,而TraceEvent可以完成大部分工作,所以你可以在项目中包含它。
PerfMonitor和TraceEvent附带完整的源代码,并且在Ms-PL下获得许可。
PerfMonitor概述: http://bcl.codeplex.com/wikipage?title=PerfMonitor
TraceEvent概述: http://bcl.codeplex.com/wikipage?title=TraceEvent
答案 1 :(得分:1)
我建议使用Tx (LINQ to logs and traces) library。
此外还有专用的LINQpad driver,因此您可以在实际ETW会话的ETL文件上编写历史查询或常设查询,并立即在LINQpad中查看结果,甚至无需编写实际代码。
答案 2 :(得分:0)
在2020年,您可以使用Microsoft.Diagnostics.Tracing.TraceEvent
创建一个简单的侦听器。示例:
class Program
{
static void Main(string[] args)
{
var sessionName = Guid.NewGuid().ToString();
using (var session = new
Microsoft.Diagnostics.Tracing.Session.TraceEventSession(sessionName))
{
// press CTRL-C to quit
Console.CancelKeyPress += (sender, e) => session.Stop();
session.Source.Dynamic.All += data =>
{
var line = $"{data}\n";
Console.WriteLine(line);
};
var providerGuid = Microsoft.Diagnostics.Tracing.Session.TraceEventProviders.GetEventSourceGuidFromName
("MyCompany-MyApp-MyEventSource1");
session.EnableProvider(providerGuid);
session.Source.Process();
}
}
}