記錄主要是透過即時裝置的互動 (「線上」),或在「離線」情境中使用從裝置過去執行後所收集到的記錄。
排序
所有記錄都有附加時間戳記,這個時間自記錄訊息時從單時鐘讀取而來。LogSink
接收訊息的方式有很多種,與其時間戳記指示不同。
主要 fuchsia.logger.Log
實作會排序透過 fuchsia.logger.LogListenerSafe
上的 LogMany
方法傳送的訊息。每當將已收集的訊息傳送至新連線的事件監聽器時,就會呼叫此方法。但是,當訊息首次送達的時間戳記並非排序時,任何使用中的事件監聽器都會以任意順序接收訊息。如果工具顯示從連續呼叫 fuchsia.logger/LogListenerSafe.Log
累積的記錄,應在收到訊息時提醒使用者,但不採用嚴格線性順序的時間戳記。
線上
由於有兩個緩衝區會儲存記錄,因此使用已上線裝置時,您可以透過兩種主要方式查看記錄。如要進一步瞭解記錄儲存在裝置上的位置,請參閱「概念:儲存空間」。
syslog 與核心記錄
在開發期間,執行 ffx log
是查看所有記錄檔的理想預設值。基本上,這個指令會執行 log_listener
程式,並列印系統記錄中的每則訊息。包括從 klog 轉寄的項目。
log_listener
會透過 fuchsia.logger.Log
和 fuchsia.logger.LogListenerSafe
通訊協定接收記錄。
此外,Syslog 中的部分記錄也會列印在序列控制台中。根據預設,這包括驅動程式庫和 driver_manager
記錄。
格式
根據預設,log_listener
會輸出下列格式的行:
[seconds][pid][tid][tags] LEVEL: message
時間戳記預設來自單音時鐘,格式精細程度為微秒。
如果來自 process=1902 的 my-元件和 session=1904,以及 time=278.14 的執行緒在 WARN 層級寫入訊息,則預設的輸出內容會是:
[278.14][1902][1904][my-component] WARN: something happened
log_listener
具有 --hide_metadata
和 --pretty
旗標,可分別減少列印的中繼資料,以及依照嚴重性列出顏色代碼記錄行。透過這些旗標,系統會隱藏部分中繼資料 (PID、TID 等),其他中繼資料則會縮減 (時間戳記、嚴重程度)。
舉例來說,如果 my-元件在 time=278.14 時以 WARN 層級顯示訊息,則美化輸出內容會如下所示:
[278.14][my-component][W] something happened
可用執行中裝置時,執行 ffx log --help
,查看修改輸出格式的選項。
fx test
基本上,fx test
會呼叫 run-test-suite
,從測試元件收集與測試元件分開的 stdout
、stderr
和 LogSink
連線,以內嵌方式列印輸出內容,並防止它們顯示在全域記錄緩衝區中。
針對還不是元件的測試,系統不會攔截記錄檔。
僅限核心記錄
klog 會透過核心控制台列印並依序顯示。
此外,系統也會透過 netsvc 透過 UDP 轉送,這是執行 fx klog
時列印的內容。在 SSH 工作階段失敗時,在背景終端機執行 fx klog
可擷取記錄,若在執行 ffx log
發生其他問題時則將其做為備份。
如果以上兩種選項都不是,您也可以直接從裝置殼層使用 dlog
傾印核心偵錯記錄。
格式
核心記錄的傾印器會以下列格式發出行:
[timestamp] pid:tid> message
時間戳記來自單調時鐘。其格式為 5 位數 (前方加 0) 秒,三位數代表毫秒 (結尾零)。
程序和執行緒 Kotlin 都是由 5 位數字 (前方加零) 寫而成。
如果來自 process=1902 且執行緒=1904 的訊息在 time=278.14 時寫入,則產生的輸出內容會是:
[00278.140] 01902:01904> something happened
fx pretty_serial
指令可用來依據嚴重性來減少 klog 列印的中繼資料和顏色代碼記錄行。使用這個指令會隱藏部分中繼資料 (PID、TID、檔案名稱等),其他中繼資料則會縮減 (時間戳記和嚴重性)。
序列輸出內容應從模擬器或其他來源插入:
ffx emu start --console | ffx debug symbolize
舉例來說,如果 my-元件在 time=278.14 時,透過 WARN 層級的訊息「發生錯誤」訊息,適當的輸出內容看起來會像這樣:
[278.14][my-component][W] something happened
舉例來說,如果「某件已發生」訊息是由具有未知嚴重性的未知元件 (時間=278.14) 列印到 klog,則相當的輸出內容會如下所示:
[278.14] something happened
離線:CQ/GI
執行測試時,Swarming 機器人會叫用「植物學家」,藉此收集數個要在網頁 UI 中顯示的輸出串流。植物學家的 stdout
和 stderr
是「緊張任務 UI」中顯示的內容。
如果是個別測試執行檔,植物學家會使用 testrunner 程式庫,並分別收集該輸出內容。測試失敗後,會顯示這段輸出內容,其連結名為 stdio
。測試執行器叫用的大多數測試都會透過 SSH 連線至目標裝置,執行 run-test-suite
。這會從測試環境收集 stdout、stderr 和記錄,並以內嵌方式列印。
syslog.txt
Botanist 在目標裝置上執行 log_listener
,並將輸出內容儲存至 syslog.txt。這相當於在開發機器上執行 ffx log
。
infra_and_test_std_and_klog.txt
這個記錄檔包含 Swarming 工作所執行的指令 stdout 和 stderr。 通常包括下列重要項目,所有交錯情形:
- 植物學家的記錄訊息
- netsvc 的核心記錄 (相當於
fx klog
) - 由 testrunner 執行的測試的
stdout
和stderr
這項匯總記錄在上傳前,會先使用相當於 ffx debug symbolize
的作業。