编写日志消息并在 Perfview 中显示的最简单方法
Simplest way to write a log message and display in Perfview
我需要写一条日志消息并在 PerfView 中捕获它。我想避免使用 EventLog
或 EventSource
,因为它们非常具有侵入性:它们需要注册新的源或 ETW 提供程序,这会在系统中留下剩余物。
理想情况下我只想调用Debug.WriteLine
(它使用OutputDebugString),但似乎PerfView 无法收集它。或者是否有一些 ETW 提供程序可以看到调试消息?
如果您有答案,请说明解决方案的两个部分:
- 我应该用C#写什么,
- 如何配置 PerfView 来捕获它(如果有一些 ETW 提供程序,只需命名它)。
你想要的是使用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 通过 记录带有定义的清单,它被添加到 ETL,因此不需要清单注册。
我需要写一条日志消息并在 PerfView 中捕获它。我想避免使用 EventLog
或 EventSource
,因为它们非常具有侵入性:它们需要注册新的源或 ETW 提供程序,这会在系统中留下剩余物。
理想情况下我只想调用Debug.WriteLine
(它使用OutputDebugString),但似乎PerfView 无法收集它。或者是否有一些 ETW 提供程序可以看到调试消息?
如果您有答案,请说明解决方案的两个部分:
- 我应该用C#写什么,
- 如何配置 PerfView 来捕获它(如果有一些 ETW 提供程序,只需命名它)。
你想要的是使用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 通过