查看記錄

記錄主要是透過即時裝置的互動 (「線上」),或在「離線」情境中使用從裝置過去執行後所收集到的記錄。

排序

所有記錄都有附加時間戳記,這個時間自記錄訊息時從單時鐘讀取而來。LogSink 接收訊息的方式有很多種,與其時間戳記指示不同。

主要 fuchsia.logger.Log 實作會排序透過 fuchsia.logger.LogListenerSafe 上的 LogMany 方法傳送的訊息。每當將已收集的訊息傳送至新連線的事件監聽器時,就會呼叫此方法。但是,當訊息首次送達的時間戳記並非排序時,任何使用中的事件監聽器都會以任意順序接收訊息。如果工具顯示從連續呼叫 fuchsia.logger/LogListenerSafe.Log 累積的記錄,應在收到訊息時提醒使用者,但不採用嚴格線性順序的時間戳記。

線上

由於有兩個緩衝區會儲存記錄,因此使用已上線裝置時,您可以透過兩種主要方式查看記錄。如要進一步瞭解記錄儲存在裝置上的位置,請參閱「概念:儲存空間」。

syslog 與核心記錄

在開發期間,執行 ffx log 是查看所有記錄檔的理想預設值。基本上,這個指令會執行 log_listener 程式,並列印系統記錄中的每則訊息。包括從 klog 轉寄的項目。

log_listener 會透過 fuchsia.logger.Logfuchsia.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,從測試元件收集與測試元件分開的 stdoutstderrLogSink 連線,以內嵌方式列印輸出內容,並防止它們顯示在全域記錄緩衝區中。

針對還不是元件的測試,系統不會攔截記錄檔。

僅限核心記錄

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 中顯示的輸出串流。植物學家的 stdoutstderr 是「緊張任務 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 執行的測試的 stdoutstderr

這項匯總記錄在上傳前,會先使用相當於 ffx debug symbolize 的作業。