关于 TraceLogging

TraceLogging 是一种记录事件的系统,可以在不带清单的情况下对其进行解码。 在 Windows 上,TraceLogging 在用户模式和内核模式组件中使用, 用于为 Windows (ETW) 事件生成事件跟踪。 TraceLogging 基于 Windows 事件跟踪 (ETW) ,并提供一种简化的代码检测方法。

Windows (ETW) 的事件跟踪已随 Windows 2000 一起引入,并在 Windows Vista 中进行了更新。 TraceLogging 基于 Windows Vista ETW API 构建。 在 Windows Vista 或更高版本上运行时,提供程序可以使用 TraceLogging。 现有的 ETW 跟踪控制器可用于控制 TraceLogging 提供程序,并使用 Windows Vista API 捕获跟踪。 在 Windows 10 或更高版本上运行时,使用 TDH 解码 API 的现有 ETW 跟踪解码器可以解码 TraceLogging 事件。

TraceLogging 具有以下优势:

  • 直接在代码中定义事件的简单性,类似于 WPP,但不需要预处理工具。
  • 结构化数据:具有类型的命名字段、对数组和结构的支持。
  • 通过 ETW 活动的事件关联。
  • 事件的所有解码信息都包含在事件本身中,因此无需其他文件即可解码。
  • TraceLogging 事件提供程序 API 可用于 C/C++.NETWindows 运行时 (WinRT) 。 适用于 Python、Rust 等的外部支持。

尽管 TraceLogging 提供了一些好处,并且应考虑用于新的跟踪,但基于清单的 ETW 仍适用于许多方案。

  • 如果事件面向 Windows 事件日志 (中的某个旧 Windows 日志,例如系统日志或应用程序日志) ,请继续使用基于清单的 ETW。
  • 如果跟踪文件大小是一个重要考虑因素,请继续使用基于清单的 ETW。 TraceLogging 事件包括每个事件内) 提供程序名称、事件名称和字段名称 (事件字符串,并且通常大于基于清单的等效事件。
  • 如果在现有跟踪技术方面投入了大量资金,则无需切换到 TraceLogging。
  • 否则,请考虑使用 TraceLogging,因为它为开发人员和事件使用者提供了更简单的体验。

API 概要概述

有多个 TraceLogging API,每个 API 面向不同的开发人员受众。

  • 如果需要从 C 或 C++ 代码生成事件, TraceLoggingProvider.h 提供了一个有效的 API,用于从用户模式或内核模式代码生成 TraceLogging 事件。 必须在编译时定义事件。
  • 否则,如果需要从 .NET 代码生成事件,.NET EventSource 类支持生成基于清单和基于 TraceLogging 的 ETW 事件。 必须在编译时定义事件。
  • 否则,如果使用 Windows 运行时 (WinRT) ,则 LoggingChannel 已在 Windows 10 中扩展,以记录 TraceLogging 事件。
  • 否则,你可能能够使用社区支持的选项,例如 TraceLoggingDynamic

关于事件跟踪