Global Logger Trace Session
A Global Logger trace session records events that occur during the boot process before the system is fully operational, such as events generated by device drivers. It is a reserved trace session that is built into Windows.
Global Logger trace sessions always write messages to a trace log. Global Logger does not support real-time trace sessions or buffered trace sessions.
Because Global Logger must be available early in the operating system boot process, it is started and configured by using registry entries (in the HKLM\SYSTEM\CurrentControlSet\Control\WMI\GlobalLogger subkey), instead of function calls. After starting, the Global Logger behaves like a regular event tracing session.
The Global Logger trace session uses a reserved session name, "GlobalLogger." The control GUID is represented by the constant, GlobalLoggerGuid. You create a Global Logger trace session, and then restart the computer to start the trace session. Only one Global Logger trace session can run on the computer at a time.
To create a Global Logger trace session, use Tracelog. It automatically creates the registry subkey and entries that store trace session options. The Global Logger trace session starts when you restart the computer. For more information, see Tracelog Command Syntax.
To format the trace messages from a Global Logger trace session, use Tracefmt with system.tmf, a trace message format file included in the WDK.
Because the Global Logger session is triggered by registry entries, it runs every time that the entries appear in the registry. To prevent the Global Logger session from starting every time the system starts, set the value of the Start entry to 0 or delete all of the registry entries.
You can convert a Global Logger trace session to an NT Kernel Logger trace session, thereby tracing the kernel during the boot process. For information, see Boot-time Global Logger Session
Trace providers, such as kernel-mode drivers and user-mode applications, can log to the Global Logger trace session. This enables you to trace a driver or other trace provider during system boot. For information, see Logging to the Global Logger Session
Limitations of the Global Logger Trace Session
The Global Logger trace session is very useful, but it's important to be aware of its limitations:
You can run only one Global Logger session at a time.
The Global Logger session does not send enable notification to providers.
The Global Logger registry entries remain in the registry and are effective until you reset or delete them manually, or use the tracelog -remove command. Until you reset them, the Global Logger session starts every time you start the system.
The Windows ACPI logger is permanently enabled for the Global Logger trace session. The trace messages from this logger appear in the trace log.
If a standard trace session starts while a driver is logging to the Global Logger session, the driver switches and starts logging to the standard trace session.
Global Logger Registry Entries
The following table shows the registry entries that configure the Global Logger session. These entries are in the HKLM\SYSTEM\CurrentControlSet\Control\WMI\GlobalLogger subkey. Only the Start entry is required.
In addition to the registry entries in this table, you can also add a ControlGUID subkey under the GlobalLogger subkey to represent a trace provider, such as a driver, that logs to the Global Logger trace session. For information, see Logging to the Global Logger Session.
Entry | Data type | Description |
---|---|---|
Start |
REG_DWORD |
When set to 1 (on), the Global Logger session starts the next time the system starts. 0 = off, 1=on |
BufferSize |
REG_DWORD |
Specifies the size of each buffer (in KB). The default value is 0x40 (64 KB). |
ClockType |
REG_DWORD |
Specifies the timer used for trace message time stamps. Beginning with Windows Vista, the default value is 1. On operating systems prior to Windows Vista, the default value is 2. 1 = Performance counter value (high resolution) 2 = System timer 3 = CPU cycle clock |
EnableKernelFlags |
REG_BINARY |
Converts the Global Logger session to an NT Kernel Logger trace session and specifies the events included in the kernel trace. For information, see Boot-time Global Logger Session. |
FileCounter |
REG_DWORD |
Stores the number of event trace log files generated by Global Logger sessions. The system increments this value until it reaches the value of FileMax. Then, it resets the value to 0. This counter prevents the system from overwriting a Global Logger trace log file. |
FileMax |
REG_DWORD |
Specifies the maximum number of event trace log files permitted on the system. When the number of trace logs reaches the specified maximum, the system begins to overwrite the logs, beginning with the oldest. The default value is 0, meaning that there is no maximum. |
FileName |
REG_SZ |
Path (optional) and file name of the event trace log file. The default is %SystemRoot%\System32\LogFiles\WMI\trace.log. |
FlushTimer |
REG_DWORD |
Specifies how often (in seconds) the trace buffers are forcibly flushed. This forced flush is in addition to the automatic flush that occurs whenever a buffer is full and when the trace session stops. The default value is 0. By default, buffers are flushed only when they are full. The minimum flush time is 1 second. |
LogFileMode |
REG_DWORD |
Specifies log session options. Supported only in Windows Vista and later versions of Windows. |
MaximumBuffers |
REG_DWORD |
Specifies the maximum number of buffers that can be allocated for the session. The default value is 0x19 (25). |
MaximumFileSize |
REG_DWORD |
Specifies the maximum size of the event trace log file. By default, there is no maximum file size. |
MinimumBuffers |
REG_DWORD |
Specifies the number of buffers allocated when the session starts. The default value is 0x3. |
Status |
REG_DWORD |
Stores the return code from the attempt to start a Global Logger trace session. If the session failed to start, the value of this entry is a Win32 error code. If the session started, the value of this entry is ERROR_SUCCESS. |
These registry entries that you create remain in the registry and are effective until you delete them or change their values. Therefore, after the Global Logger session has run, use the tracelog -remove GlobalLogger command to set the value of the Start entry to 0 and delete the other Global Logger registry entries. Otherwise, the Global Logger session runs every time that you restart the computer, and the resulting log file can grow very large.
Logging Mode Constants
The following table displays the valid values for the LogFileMode registry entry in the HKLM\System\CurrentControlSet\Control\WMI\GlobalLogger subkey. This entry is used to set options for a Global Logger trace session, including those for real-time trace sessions, private trace sessions, circular logging, and buffering (no log). This registry entry is supported only in Windows Vista and later versions of Windows.
This registry entry corresponds to the LogFileMode member of the EVENT_TRACE_PROPERTIES structure. Its values correspond to the Logging Mode Constants. The EVENT_TRACE_PROPERTIES structure and the Logging Mode Constants are described in the Microsoft Windows SDK documentation.
This table is displayed here to show the hexadecimal values of the constants. Use these values or a sum of these values to represent the constant in the LogFileMode registry entry.
Value | Constant | Description |
---|---|---|
0x0 |
EVENT_TRACE_FILE_MODE_NONE |
No event trace log files are created. |
0x1 |
EVENT_TRACE_FILE_MODE_SEQUENTIAL |
Event trace log files are sequential. |
0x2 |
EVENT_TRACE_FILE_MODE_CIRCULAR |
Event trace log files are circular. |
0x4 |
EVENT_TRACE_FILE_MODE_APPEND |
Append trace messages to an existing log file. This mode is valid only with sequential files. |
0x8 |
EVENT_TRACE_FILE_MODE_NEWFILE |
Create a new event trace log file whenever the existing file reaches the value of the MaximumFileSize entry (see the table above). |
0x20 |
EVENT_TRACE_FILE_MODE_PREALLOCATE |
Reserves space for the event trace log file. Valid only with EVENT_TRACE_FILE_MODE_SEQUENTIAL or EVENT_TRACE_FILE_MODE_CIRCULAR, and not valid with EVENT_TRACE_FILE_MODE_NEWFILE. |
0x40 |
EVENT_TRACE_NONSTOPPABLE_MODE |
A call to StopTrace does not stop the trace session. This feature prevents users from stopping trace sessions that the system requires for diagnosis and tuning. |
0x100 |
EVENT_TRACE_REAL_TIME_MODE |
Specifies a real-time trace session. |
0x200 |
EVENT_TRACE_DELAY_OPEN_FILE_MODE |
For internal use only. |
0x400 |
EVENT_TRACE_BUFFERING_MODE |
Events are retained in the buffers. They are never written to a log file or delivered to a trace consumer. |
0x800 |
EVENT_TRACE_PRIVATE_LOGGER_MODE |
Specifies a private trace session. This flag is not valid for a Global Logger trace session. |
0x1000 |
EVENT_TRACE_ADD_HEADER_MODE |
For internal use only. |
0x2000 |
EVENT_TRACE_USE_KBYTES_FOR_SIZE |
Interpret the value of MaximumFileSize in KB, instead of MB. |
0x4000 |
EVENT_TRACE_USE_GLOBAL_SEQUENCE |
Generates global sequence numbers for trace messages. These numbers are unique for all trace sessions on the computer. By default, trace messages do not have any sequence numbers. |
0x8000 |
EVENT_TRACE_USE_LOCAL_SEQUENCE |
Generates local sequence numbers for trace messages. These numbers are unique within the trace session. By default, trace messages do not have any sequence numbers. |
0x10000 |
EVENT_TRACE_RELOG_MODE |
For internal use only. |
0x80000 |
EVENT_TRACE_KD_FILTER_MODE |
Redirects the trace messages to the kernel debugger and sets the trace buffer size to 3 KB, the maximum buffer size for the debugger. |
0x1000000 |
EVENT_TRACE_MODE_RESERVED |
Not valid for a Global Logger trace session. |
0x01000000 |
EVENT_TRACE_USE_PAGED_MEMORY |
Allocate trace session buffers from pageable memory. By default, the buffers are allocated from nonpageable memory. |