日志记录模式常量

以下常量表示事件跟踪会话的可能日志记录模式。

常量用于 EVENT_TRACE_LOGFILEEVENT_TRACE_PROPERTIESTRACE_LOGFILE_HEADER 结构的 LogFileMode 成员。 这些常量在 Evntrace.h 头文件中定义。

“模式” 说明
EVENT_TRACE_FILE_MODE_NONE (0x00000000) 与未指定最大文件大小 的EVENT_TRACE_FILE_MODE_SEQUENTIAL 相同。
EVENT_TRACE_FILE_MODE_SEQUENTIAL (0x00000001) 按顺序将事件写入日志文件;当文件达到其最大大小时停止。请勿与 EVENT_TRACE_FILE_MODE_CIRCULAREVENT_TRACE_FILE_MODE_NEWFILE一起使用。
EVENT_TRACE_FILE_MODE_CIRCULAR (0x00000002) 将事件写入日志文件。 文件达到最大大小后,最早的事件将替换为传入事件。请注意,循环日志文件的内容在多处理器计算机上可能无序显示。
请勿与 EVENT_TRACE_FILE_MODE_APPENDEVENT_TRACE_FILE_MODE_NEWFILEEVENT_TRACE_FILE_MODE_SEQUENTIAL一起使用。
EVENT_TRACE_FILE_MODE_APPEND (0x00000004) 将事件追加到现有的顺序日志文件。 如果此文件不存在,则创建此文件。 仅当为时钟解析指定 系统时间 时,才使用;否则, ProcessTrace 将返回时间戳不正确的事件。 使用 EVENT_TRACE_FILE_MODE_APPEND 时, BufferSizeNumberOfProcessorsClockType 的值必须显式提供,并且必须在记录器和追加的文件中相同。
请勿与 EVENT_TRACE_REAL_TIME_MODEEVENT_TRACE_FILE_MODE_CIRCULAREVENT_TRACE_FILE_MODE_NEWFILEEVENT_TRACE_PRIVATE_LOGGER_MODE一起使用。
Windows 2000: 不支持此值。
EVENT_TRACE_FILE_MODE_NEWFILE (0x00000008) 当文件达到最大大小时,自动切换到新的日志文件。 必须设置 EVENT_TRACE_PROPERTIESMaximumFileSize 成员。指定的文件名必须是格式化字符串 (例如,字符串包含 %d,例如 c:\test%d.etl) 。 每次创建新文件时,都会递增计数器并使用其值,更新格式化字符串,并将生成的字符串用作文件名。
专用事件跟踪会话不允许此选项,也不应用于 NT 内核记录器会话。
请勿与 EVENT_TRACE_FILE_MODE_CIRCULAREVENT_TRACE_FILE_MODE_APPENDEVENT_TRACE_FILE_MODE_SEQUENTIAL一起使用。
Windows 2000: 不支持此值。
EVENT_TRACE_FILE_MODE_PREALLOCATE (0x00000020) 保留 EVENT_TRACE_PROPERTIES。将日志文件的磁盘空间的 MaximumFileSize 字节提前。 对于循环日志文件和顺序日志文件,该文件在日志记录期间会占用整个空间。 停止会话时,日志文件将减小到所需的大小。 必须设置 EVENT_TRACE_PROPERTIES。MaximumFileSize
不能将 模式用于专用事件跟踪会话。
Windows 2000: 不支持此值。
EVENT_TRACE_NONSTOPPABLE_MODE (0x00000040) 无法停止日志记录会话。 仅自动记录器支持此模式。Windows Vista 及更高版本支持此选项。
.
EVENT_TRACE_SECURE_MODE (0X00000080) 将可以将事件记录到会话的人员限制为具有 TRACELOG_LOG_EVENT 权限的人员。 Windows Vista 及更高版本支持此选项。
EVENT_TRACE_REAL_TIME_MODE (0x00000100) 实时将事件传送给使用者。 事件在刷新缓冲区时传递,而不是在提供程序写入事件时传递。 如果没有使用者使用事件,则不应启用实时模式,因为当缓冲区已满时,对日志事件的调用最终会失败。 在 Windows Vista 之前,如果未使用事件,则会放弃事件。请勿在 Windows XP 或 Windows Server 2003 上的一个进程中指定多个实时使用者。 相反,让一个线程使用事件并将事件分发给其他线程。
在 Windows Vista 之前: 不应使用实时模式,因为受支持的事件速率远低于从日志文件读取 (事件可能会) 删除。 此外,在具有多个处理器的计算机上无法保证事件顺序。 实时模式更适用于低流量的通知类型事件。

可以将此模式与其他日志文件模式组合使用;但是,请勿将此模式用于EVENT_TRACE_PRIVATE_LOGGER_MODE。 请注意,如果将此模式与其他日志文件模式结合使用,缓冲区将每秒刷新一次,从而导致将部分填充的缓冲区写入日志文件。 例如,如果使用 64k 缓冲区,并且日志记录速率为每秒 1 个事件,则服务将以 64k/秒的速度写入日志文件。
EVENT_TRACE_DELAY_OPEN_FILE_MODE (0x00000200) 此模式用于延迟打开日志文件,直到事件发生。
注意:
在 Windows Vista 或更高版本上,此模式不适用,不应使用。
EVENT_TRACE_BUFFERING_MODE (0x00000400) 此模式将事件写入循环内存缓冲区。 超出缓冲区总大小的事件会逐出缓冲区中仍保留的最早事件。 此内存缓冲区的大小是 MinimumBuffersBufferSize 的乘积, (请参阅 EVENT_TRACE_PROPERTIES) .As 此公式的结果,任何使用 EVENT_TRACE_BUFFERING_MODE 的缓冲区都将忽略 MaximumBuffers 值。
事件不会写入日志文件或实时传送,并且 ETW 不会刷新缓冲区。 若要获取缓冲区的快照,请调用 FlushTrace 函数。
此模式对于调试设备驱动程序以及使用 WMITrace 内核调试器扩展查看内存中缓冲区内容的功能特别有用。
请勿与 EVENT_TRACE_FILE_MODE_SEQUENTIALEVENT_TRACE_FILE_MODE_CIRCULAREVENT_TRACE_FILE_MODE_APPENDEVENT_TRACE_FILE_MODE_NEWFILEEVENT_TRACE_REAL_TIME_MODE一起使用。
EVENT_TRACE_PRIVATE_LOGGER_MODE (0x00000800) 创建在其事件跟踪提供程序所在的同一进程中运行的用户模式事件跟踪会话。 缓冲区的内存来自进程的内存。 不需要内核数据的进程可以使用专用事件跟踪会话来消除与内核模式转换相关的开销。
如果提供程序由多个进程注册,则 ETW 会将进程标识符追加到日志文件名称,以创建唯一的日志文件名称。 例如,如果控制器将日志文件名指定为 c:\mylogs\myprivatelog.etl,则 ETW 会将日志文件创建为 c:\mylogs\myprivatelog.etl_nnnn,其中 nnnn 是进程标识符。 进程标识符不会追加到注册提供程序的第一个进程,而只会追加到注册提供程序的后续进程。
专用事件跟踪会话具有以下限制:
  • 专用会话只能为其执行的进程线程记录事件。
  • 每个进程最多可以有 8 个专用会话。
  • 专用会话不能与实时传送一起使用。
  • 由专用会话生成的事件不包括内核模式与用户模式指令的执行时间,也不包括所用 CPU 时间的线程级别详细信息。
启动系统范围的专用记录器时,现在可以将进程 ID 筛选器和可执行名称筛选器传递到会话控制 API。 为了在跨进程方案中获得最佳结果,应在会话期间将相同的筛选器传递给每个控件操作,包括提供程序启用/分拨调用。 请注意,筛选器的格式与 EnableTraceEx2 使用的格式相同。
可以将此模式与 EVENT_TRACE_PRIVATE_IN_PROC 模式结合使用。
在Windows 10版本 1703 之前:只有 LocalSystem、管理员和管理员组中在提升的进程中运行的用户才能创建专用会话。 如果包含 EVENT_TRACE_PRIVATE_IN_PROC 标志,任何用户都可以创建进程内专用会话。 此外,在早期版本的 Windows 中,每个进程只能有一个专用会话 (,除非还指定了EVENT_TRACE_PRIVATE_IN_PROC模式,在这种情况下,最多可以创建三个进程内专用会话) 。
在 Windows Vista 之前: 性能日志用户组中的用户还可以创建专用会话。

请勿与 EVENT_TRACE_REAL_TIME_MODE 一起使用。
在 Windows 7 和 Windows Server 2008 R2 之前: 不要与 EVENT_TRACE_FILE_MODE_NEWFILE 一起使用。
EVENT_TRACE_ADD_HEADER_MODE (0x00001000) 此选项将标头添加到日志文件。
注意:
在 Windows Vista 或更高版本上,此模式不适用,不应使用。
EVENT_TRACE_USE_KBYTES_FOR_SIZE (0x00002000) 使用千字节作为指定文件大小的度量单位。 默认的度量单位为 MB。 此模式适用于 AutoLogger 会话的 MaxFileSize 注册表值和 EVENT_TRACE_PROPERTIESMaximumFileSize 成员。 Windows Vista 及更高版本支持此选项。
EVENT_TRACE_USE_GLOBAL_SEQUENCE (0x00004000) 使用跨事件跟踪会话唯一的序列号。 此模式仅适用于使用 TraceMessage 函数记录的事件。 有关详细信息,请参阅 TraceMessage 了解使用情况详细信息。
EVENT_TRACE_USE_GLOBAL_SEQUENCEEVENT_TRACE_USE_LOCAL_SEQUENCE 是互斥的。
Windows 2000: 不支持此值。
EVENT_TRACE_USE_LOCAL_SEQUENCE (0x00008000) 仅对单个事件跟踪会话使用唯一的序列号。 此模式仅适用于使用 TraceMessage 函数记录的事件。 有关详细信息,请参阅 TraceMessage 了解使用情况详细信息。
EVENT_TRACE_USE_GLOBAL_SEQUENCEEVENT_TRACE_USE_LOCAL_SEQUENCE 是互斥的。
Windows 2000: 不支持此值。
EVENT_TRACE_RELOG_MODE (0x00010000) 记录事件而不包括 EVENT_TRACE_HEADER注意:
不应使用此模式。 它保留供内部使用。
Windows 2000: 不支持此值。
EVENT_TRACE_PRIVATE_IN_PROC (0x00020000) EVENT_TRACE_PRIVATE_LOGGER_MODE 模式结合使用以启动专用会话。 此模式强制要求只有注册提供程序 GUID 的进程才能使用该 GUID 启动记录器会话。
每个进程最多可以创建三个进程内专用会话。
Windows Vista 及更高版本支持此选项。
EVENT_TRACE_MODE_RESERVED (0x00100000) 此选项用于发出堆和关键节跟踪信号。 Windows Vista 及更高版本支持此选项。
EVENT_TRACE_STOP_ON_HYBRID_SHUTDOWN (0x00400000) 此选项在混合关闭时停止日志记录。 如果未指定 EVENT_TRACE_STOP_ON_HYBRID_SHUTDOWNEVENT_TRACE_PERSIST_ON_HYBRID_SHUTDOWN ,则 ETW 将根据调用方是否来自会话 0 选择默认值。Windows 8 和 Windows Server 2012 支持此选项。
EVENT_TRACE_PERSIST_ON_HYBRID_SHUTDOWN (0x00800000) 此选项在混合关闭时继续日志记录。 如果未指定 EVENT_TRACE_STOP_ON_HYBRID_SHUTDOWNEVENT_TRACE_PERSIST_ON_HYBRID_SHUTDOWN ,则 ETW 将根据调用方是否来自会话 0 选择默认值。Windows 8 和 Windows Server 2012 支持此选项。
EVENT_TRACE_USE_PAGED_MEMORY (0x01000000) 使用分页内存。 建议使用此设置,以便事件不会占用非分页内存。非分页缓冲区将非分页内存用于缓冲区空间。 由于非分页缓冲区永远不会分页,因此日志记录会话性能良好。 使用可分页缓冲区的资源消耗较少。
内核模式提供程序和系统记录器无法将事件记录到指定此日志记录模式的会话。
如果设置了 EVENT_TRACE_PRIVATE_LOGGER_MODE ,则忽略此模式。
不能将此模式用于 NT 内核记录器。
Windows 2000: 不支持此值。
EVENT_TRACE_SYSTEM_LOGGER_MODE (0x02000000) 此选项将接收来自 SystemTraceProvider 的事件。 如果 StartTraceProperties 参数 LogFileMode 包含此标志,则记录器将是系统记录器。Windows 8 和 Windows Server 2012 支持此选项。
EVENT_TRACE_INDEPENDENT_SESSION_MODE (0x08000000) 指示日志记录会话不应受到其他会话中的 EventWrite 失败的影响。 如果没有此标志,如果无法将事件发布到启用提供程序的会话之一,则事件将不会发布到任何会话。 设置此标志后,未能将事件写入一个会话不会导致 EventWrite 函数在其他会话中返回错误代码。
不要与 EVENT_TRACE_PRIVATE_LOGGER_MODE 一起使用。
Windows 8.1、Windows Server 2012 R2 及更高版本支持此选项。
EVENT_TRACE_NO_PER_PROCESSOR_BUFFERING (0x10000000) 将记录在不同处理器上的事件写入公共缓冲区。 使用此模式可以消除使用系统时间在不同处理器上发布事件时出现无序事件的问题。 此模式还可以消除循环日志似乎在多个处理器计算机上删除事件的问题。
如果不使用此模式并且使用了系统时间,则事件可能会在多个处理器计算机上出现不按顺序显示。 这是因为 ETW 缓冲区与处理器而不是线程相关联。 因此,如果线程从一个 CPU 切换到另一个 CPU,则可以先将与后一个 CPU 关联的缓冲区刷新到磁盘,然后再刷新与前一个 CPU 关联的 CPU。
例如,如果预期 (大量事件,) 每秒超过 1,000 个事件,则不应使用此模式。
请注意,事件中不包含处理器编号。
Windows 7、Windows Server 2008 R2 及更高版本支持此选项。
EVENT_TRACE_ADDTO_TRIAGE_DUMP (0x80000000) 此选项将 ETW 缓冲区添加到会审转储。 Windows 8 和 Windows Server 2012 支持此选项。