設定和啟動自動記錄器會話
AutoLogger 事件追蹤會話記錄作業系統開機過程早期發生的事件。 應用程式和設備驅動器可以使用 AutoLogger 工作階段,在使用者登入之前擷取追蹤。 請注意,某些設備驅動器,例如磁碟設備驅動器,不會在 AutoLogger 作業階段開始時載入。
AutoLogger 與全域記錄器不同,方式如下:
- 您可以指定一或多個自動記錄器會話(全域記錄器是每個人記錄事件的單一會話)。
- 當會話啟動時,AutoLogger 會將啟用通知傳送給提供者(全域記錄器未傳送啟用通知給提供者,因此提供者必須依賴其他方法來知道是否啟動全域記錄器會話,才能開始記錄事件)。
- AutoLogger 不支持記錄 NT 核心記錄器事件(請參閱 EnableFlagsEVENT_TRACE_PROPERTIES成員)。 若要記錄 NT 核心記錄器事件,您必須使用 全域記錄器。
如需有關全域記錄器會話的詳細資訊,請參閱 設定及啟動全域記錄器會話。
注意
ETW 支援 Windows Vista 和更新版本的 AutoLogger。 在舊版作業系統上使用 全域記錄器。
您可以使用註冊表來設定 AutoLogger 工作階段。 如果登錄機碼不存在,請新增下列登錄機碼:
HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Control
\WMI
\Autologger
在 自動記錄器 金鑰底下,為每個您想要設定的 AutoLogger 工作階段建立金鑰,如下列範例所示。
HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Control
\WMI
\Autologger
\Logger Session A
\Logger Session B
\Logger Session C
針對每個會話,為每個您想要啟用會話的提供者建立密鑰。 使用提供者的 GUID 作為金鑰。
HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Control
\WMI
\Autologger
\Logger Session A
\{ProviderGuid1}
\{ProviderGuid2}
\Logger Session B
\Logger Session C
下表描述您可以為每個 AutoLogger 工作階段定義的值。 您必須具有系統管理員許可權,才能指定這些登錄值。 Start 和 Guid 值是唯一啟動 AutoLogger 會話所需的值;如果登錄中沒有值,所有其他值都會使用預設設定。 一般而言,您應該使用預設值。 如果您指定 ETW 不支援的值,ETW 將會覆寫此值。
價值 | 類型 | 描述 |
---|---|---|
BufferSize | REG_DWORD | 每個緩衝區的大小,以 KB 為單位。 應小於一 MB。 ETW 會使用物理記憶體的大小來計算此值。 |
ClockType | REG_DWORD | 記錄每個事件的時間戳時要使用的定時器。
Windows Vista 和更新版本的預設值為 1(性能計數器值)。 在 Windows Vista 之前,預設值為 2 (系統定時器)。 |
DisableRealtimePersistence | REG_DWORD | 若要停用即時持續性,請將此值設定為 1。 即時會話的預設值為 0(已啟用)。 如果已啟用即時持續性,則會保存電腦關機時未傳遞的即時事件。 然後,當消費者下次連接到會話時,事件就會傳遞給消費者。 |
檔案計數器 | REG_DWORD | 請勿設定或修改此值。 如果指定 FileMax,這個值是用來遞增記錄檔名稱的序號。 如果值無效,則會假設為1。 |
FileName | REG_SZ | 記錄檔的完整路徑。 此檔案的路徑必須存在。 記錄檔是循序記錄檔。 路徑限制為 1024 個字元。 如果未指定 FileName,事件會寫入至 %SystemRoot%\System32\LogFiles\WMI<sessionname>.etl。 |
FileMax | REG_DWORD | ETW 所建立之記錄檔的實例數目上限。 如果 FileName 中指定的記錄檔存在,ETW 會將 FileCounter 值附加至檔名。 例如,如果使用默認記錄檔名稱,格式為 %SystemRoot%\System32\LogFiles\WMI<sessionname>.etl.NNNN。 第一次啟動計算機時,檔名會 <會話名稱>.etl.0001、第二次檔名 <會話名稱>.etl.0002 等等。 如果 FileMax 為 3,則當電腦第四次重新啟動時,ETW 會將計數器重設為 1,並在存在時覆寫 <sessionname>.etl.0001。 支持的記錄檔實例數目上限為16。 請勿將這項功能與 EVENT_TRACE_FILE_MODE_NEWFILE 日誌檔案模式一同使用。 |
FlushTimer | REG_DWORD | 強制清空追蹤緩衝區的頻率,以秒計算。 排清時間下限為1秒。 這個強制排清是額外於緩衝區已滿時以及追蹤會話停止時發生的自動排清。 針對實時記錄器的情況,零值(預設值)表示排清時間會設定為1秒。 實時記錄器是在 LogFileMode 設定為 EVENT_TRACE_REAL_TIME_MODE時。 預設值為 0。 根據預設,只有在緩衝區已滿時,才會排清緩衝區。 |
Guid | REG_SZ | 包含可唯一識別會話的 GUID 的字串。 此值是必要的。 |
LogFileMode | REG_DWORD | 指定一或多個記錄模式。 如需可能的值,請參閱 記錄模式常數。 預設值為 EVENT_TRACE_FILE_MODE_SEQUENTIAL。 您可以指定 EVENT_TRACE_BUFFERING_MODE 或 EVENT_TRACE_REAL_TIME_MODE,而不是寫入記錄檔。 指定 EVENT_TRACE_BUFFERING_MODE 可避免在檔案系統可用時,將會話內容排清至磁碟的成本。 請注意,使用 EVENT_TRACE_BUFFERING_MODE 會導致系統忽略 MaximumBuffers 值,因為緩衝區大小是 MinimumBuffers 的乘積,BufferSize。 AutoLogger 會話不支援 EVENT_TRACE_FILE_MODE_NEWFILE 記錄模式。 如果指定 EVENT_TRACE_FILE_MODE_APPEND,必須明確提供 BufferSize,且必須在記錄器和要追加的檔案中保持一致。 |
最大檔案大小 | REG_DWORD | 記錄檔的檔案大小上限,以 MB 為單位。 當達到大小上限時,會話將會關閉,除非您處於循環記錄檔模式。 若要指定沒有限制,請將值設定為 0。 如果未設定,則預設值為100 MB。 達到檔案大小上限時所發生的行為取決於 LogFileMode的值。 |
最大緩衝區數量 | REG_DWORD | 要配置的緩衝區數目上限。 一般而言,此值是緩衝區數目下限加上 20。 ETW 會使用緩衝區大小和物理記憶體大小來計算此值。 此值必須大於或等於 MinimumBuffers的值。 |
最小緩衝區 | REG_DWORD | 在啟動時配置的緩衝區數目下限。 您可以指定的緩衝區數目下限是每個處理器的兩個緩衝區。 例如,在單一處理器計算機上,緩衝區數目下限為兩個。 |
開始 | REG_DWORD | 若要在下次重新啟動電腦時啟動 AutoLogger 工作階段,請將此值設定為 1;否則,請將此值設定為 0。 |
狀態 | REG_DWORD | AutoLogger 的啟動狀態。 如果 AutoLogger 無法啟動,則此機碼的值是適當的 Win32 錯誤碼。 如果 AutoLogger 已成功啟動,則此機碼的值會為 ERROR_SUCCESS (0)。 |
開機 | REG_DWORD | 這項功能不應該在偵錯案例之外使用。 如果此登錄機碼設定為 1,則自動記錄器會在核心初始化期間早於正常啟動,以在初始化許多重要核心子系統期間擷取事件。 不過,啟用此選項會對開機時間產生負面影響,並對自動記錄器施加額外的限制。 如果啟用此功能,則自動記錄器會話 GUID 必須填入,而且許多其他自動記錄工具設定可能無法運作。 Windows Server 2022 和更新版本支援此密鑰。 |
下表描述您可以針對您想要啟用會話的每個提供者所定義的值。 您必須具有系統管理員許可權,才能指定這些登錄值。 如果您指定 ETW 不支援的值,ETW 將會覆寫此值。
價值 | 類型 | 描述 |
---|---|---|
已啟用 | REG_DWORD | 判斷服務提供者是否已啟用。 若要啟用提供者,請將此值設定為 1。 若要停用提供者,請將此值設定為 0。 預設值為 0。 |
EnableFlags | REG_DWORD | 提供者定義的值,指定提供者產生事件的事件類別。 如需詳細資訊,請參閱 EnableTrace 函式的 EnableFlags 參數。 如果提供者不支援 MatchAnyKeyword 或 MatchAllKeyword,請指定此值名稱。 |
EnableLevel | REG_DWORD | 提供者定義的值,指定事件中包含的詳細數據層級。 例如,您可以使用此值來指出提供者產生的事件嚴重性層級(資訊、警告、錯誤)。 如需預先定義的層級清單,請參閱 enableTraceEx函式層級 參數。 |
啟用屬性 | REG_DWORD | 使用此值以便在記錄檔中包含以下一項或多項目:
|
MatchAnyKeyword | REG_QWORD | 關鍵詞的位掩碼,可決定您想要提供者寫入的事件類別。 如果事件的任何關鍵詞位與此遮罩中設定的任何位匹配,提供者會寫入事件。 若要指定提供者寫入所有事件,請將此值設定為零。 如需範例,請參閱 EnableTraceEx 函式的一節。 |
MatchAllKeyword | REG_QWORD | 此位掩碼是選擇性的。 此遮罩會進一步限制您想要提供者寫入的事件類別。 如果事件的關鍵詞符合 MatchAnyKeyword 條件,則提供者只有在此遮罩中的所有位都存在於事件關鍵詞中時,才會寫入事件。 如果 MatchAnyKeyword 為零,則不使用此遮罩。 如需範例,請參閱 EnableTraceEx 函式的備註部分。 |
修改登錄之後,下次重新啟動計算機時,就會啟動 AutoLogger 工作階段。 AutoLogger 會話會呼叫 EnableTraceEx 函式來啟用提供者。
AutoLogger 會話會增加系統開機時間,而且應該謹慎使用。 想要在開機過程中擷取資訊的服務應考慮將控制器邏輯新增至該服務自身,而不是使用 AutoLogger 會話。
若要停止 AutoLogger 工作階段,請呼叫 ControlTrace 函式。 您傳遞給函式的階段名稱是您用來在註冊表中定義階段的註冊表機碼名稱。
如需啟動事件追蹤工作階段的詳細資訊,請參閱 設定和啟動事件追蹤工作階段。
如需啟動私人記錄器工作階段的詳細資訊,請參閱 設定和啟動私人記錄器工作階段。
如需啟動 NT 核心記錄器工作階段的詳細資訊,請參閱 設定和啟動NT核心記錄器工作階段。