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

时间:2012-08-14 17:50:48

标签: .net-4.5 event-listener etw

我一直在尝试在.net 4.5中使用ETW。我有一个使用EventSource编写消息的小型示例应用程序,但是,我很难理解如何创建自己的ETW控制器和消费者应用程序。

我使用PerfView来启用并查看eventsources是否正常工作,以及在同一个程序集中添加EventListners。现在我希望能够拥有自己的自定义“PerfView”来管理和查看实时跟踪。我只是无法弄清楚如何绑定到EventSources。

3 个答案:

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

更多信息,请访问The TraceEvent Library Programmers Guide