ETW自定义控制器和消费者(使用.NET 4.5 EventSource提供程序)

3
我一直在尝试使用.NET 4.5中的ETW。我有一个小样本应用程序,它使用EventSource来写入消息,但是我不知道如何创建自己的ETW控制器和消费者应用程序。
我已经使用PerfView启用并查看了eventsources是否正在工作,并在同一程序集中添加了EventListners。现在我想能够拥有自己定制的“PerfView”以管理和查看实时跟踪。我只是无法弄清楚如何连接到EventSources。

OpenTrace/ProcessTrace/StopTrace可能是你需要的。https://dev59.com/Hl3Va4cB1Zd3GeqPB5iw#8311368 - Peter
有没有完整的源代码示例,可以作为最终解决方案? - Kiquenet
3个回答

1

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


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();
        }
    }
}

更多信息可在{{link1:TraceEvent库程序员指南}}中获得。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接