0

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

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

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

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

1 回答 1

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

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

于 2019-01-09T16:14:44.457 回答