编写日志消息并在Perfview中显示的最简单方法

时间:2019-01-07 07:48:40

标签: c# .net etw eventlog-source perfview

我需要写一条日志消息并将其捕获到PerfView中。我想避免使用EventLogEventSource,因为它们具有很大的侵入性:它们需要注册一个新的源或ETW提供程序,这会在系统中留下剩余的数据。

理想情况下,我只想调用Debug.WriteLine(使用OutputDebugString),但是PerfView似乎无法收集它。还是有一些ETW提供程序可以看到调试消息?

如果您有答案,请说明解决方案的两个部分:

  1. 我应该用C#编写什么,并且
  2. 如何配置PerfView来捕获它(如果有一些ETW提供程序,只需将其命名)。

1 个答案:

答案 0 :(得分:1)

您要使用EventSource。在这里,您不需要处理GUID和向系统注册。

public sealed class MinimalEventSource : EventSource
{
    public class Tasks
    {
        public const EventTask Information = (EventTask)1;
    }

    public static MinimalEventSource Log = new MinimalEventSource();

    [Event(1, Message = "{0}", Opcode = EventOpcode.Info, Task = Tasks.Information)]
    public void Information(string message)
    {
        if (IsEnabled())
        {
            WriteEvent(1, message);
        }
    }
}

使用MinimalEventSource.Log.Information("my debug info");清除数据,并使用PerfView /OnlyProviders=*MinimalEventSource用perfview捕获数据。最重要的是*。 Eventsource通过ManifestEvent记录带有定义的清单,该清单已添加到ETL中,因此不需要清单注册。