查看記錄

記錄主要會在互動式 線上情境中使用,其中包含實體 Fuchsia 目標裝置,或是在離線情境中使用,其中包含從裝置過去執行作業收集到的記錄。

所有記錄都會附上時間戳記,也就是自裝置啟動和記錄記錄訊息起的時間。讀者收到訊息的順序可能與時間戳記所示不同。

有兩個緩衝區會儲存記錄,分別是揮發性和持久性緩衝區。如要進一步瞭解記錄在裝置上的儲存位置,請參閱「儲存空間」一文。

線上

您可以透過 ffx log 以互動方式查看 Fuchsia 的記錄。

ffx log

如要查看特定記錄,您可以使用 --filter--tag--moniker 等選項。舉例來說,您可以使用 --filter 查看標記為 network 的所有記錄:

ffx log --filter network

如果您要進行啟動作業或無法存取裝置的網路,可以透過序列主控台連線至 Fuchsia 裝置。在這種情況下,您可以使用 log_listener

log_listener

在開發過程中,您可以使用 ffx log 查看所有記錄,包括從 klog 轉寄的記錄。

如果您只能使用序列主控台,沒有網路存取權,或是只在 bringup 版本上作業,在這種情況下,在序列主控台中執行 log_listener 可能會很有幫助。這個指令使用與 ffx log 相同的 CLI。如果您使用的是 log_listener,則任何使用 ffx log 的範例都可以替換為 log_listener

ffx log 會透過 fuchsia.diagnostics.ArchiveAccessor 通訊協定接收記錄。

格式

記錄的格式如下:

[seconds since boot][pid][tid][tags] SEVERITY: message

時間戳記是相對於啟動後的時間,並以微秒精細度格式化。

如果訊息 Something happened 是由程序 1902、執行緒 1904 和時間 278.14my-component 元件以 WARN 嚴重性層級寫入,輸出內容會如下所示:

[278.14][1902][1904][my-component] WARN: Something happened

ffx log 指令提供多個選項,例如 --show-metadata--show-full-moniker,可顯示更多記錄的中繼資料。如果您有執行中的 Fuchsia 裝置,可以執行 ffx log --help 來查看修改輸出格式的選項。

詳情請參閱 ffx log

動態設定最低記錄嚴重性

根據預設,透過 Fuchsia 記錄程式庫與 fuchsia.logger.LogSink 整合的元件,可在執行階段設定最低記錄嚴重性。

方法是將 --set-severity 傳遞至 ffx log--set-severity 選項會接受 <component_query>#<SEVERITY> 格式的字串引數,其中 <component_query> 是會模糊比對元件路徑名稱或網址的字串,而 <severity> 則是 TRACEDEBUGINFOWARNERRORFATAL 之一。

舉例來說,如果您執行以下指令:

ffx log --set-severity netstack#DEBUG

core/network/netstack 元件會開始發出 DEBUG 記錄,而 ffx log 輸出內容會列印包含 netstackDEBUG 記錄的記錄串流。當指令停止 (例如透過 Ctrl-C) 時,元件會恢復以預設最低嚴重性 (通常為 INFO) 發出記錄。

這項功能也適用於測試。詳情請參閱「設定最低記錄嚴重性」。

fx test

實際上,fx test 會呼叫 run-test-suite,後者會從測試元件收集隔離的 stdoutstderrLogSink 連線,並在內文中列印輸出內容,避免這些內容顯示在全域記錄緩衝區中。

如果測試尚未成為元件,就不會攔截記錄。

如要進一步瞭解密封測試,請參閱「密封整合測試」。

核心記錄檔

klogdebuglog透過核心控制台和序列控制台列印。

netsvc 會透過 UDP 轉送 klog,這是執行 fx klog 時顯示的輸出內容。如果您無法執行 ffx log,或無法建立與 Fuchsia 裝置的 SSH 連線,您可以在背景終端機中執行 fx klog,擷取核心記錄檔。

或者,您也可以使用裝置殼層中的 dlog 轉儲核心偵錯記錄。

格式

序列記錄中的核心記錄會以以下格式列印:

[timestamp] pid:tid> message

時間戳記是根據裝置啟動後的時間。格式為 5 位數 (開頭為零) 代表秒數,3 位數代表毫秒數 (尾端為零)。

程序和執行緒 KOID 的編碼長度為 5 位數 (開頭為零)。

如果訊息 Something happened 是從程序 1902、執行緒 1904 和時間 278.14 寫入,輸出結果會如下所示:

[00278.140] 01902:01904> Something happened

您可以使用 fx pretty_serial 指令,依嚴重性減少由 klog 和顏色代碼記錄行列印的中繼資料。使用 fx pretty_serial 時,系統會隱藏部分中繼資料 (例如 PID、TID、檔案名稱),並裁減其他中繼資料 (例如時間戳記和嚴重性)。

序列輸出內容應從模擬器或其他來源管道傳入。

舉例來說,如要查看模擬器中的核心記錄檔精美輸出內容,請按照下列步驟操作:

ffx emu start --console | ffx debug symbolize

舉例來說,如果 Something happened 訊息是在 278.14 時間點由 my-component 元件以 WARN 嚴重性等級列印到 klog,則精簡輸出內容會如下所示:

[278.14][my-component][W] Something happened

舉例來說,如果訊息 Something happened278.14 時間點由不明元件以不明嚴重性列印到 klog,則精簡輸出內容會如下所示:

[278.14] Something happened

將系統記錄檔傳送至序列

系統會將 syslog 中的部分記錄列印到序列控制台。根據預設,這會包括 bootstrap 領域下的所有元件,例如驅動程式和 driver_manager。您可以透過診斷組態設定新增其他元件。

離線:CQ/CI/LUCI

執行測試時,Swarming 機器人會叫用 botanist,收集多個輸出串流,並在網頁版 UI 中顯示。在網頁版 UI 中,「Swarming task UI」會顯示植物學家的 stdoutstderr

針對個別可執行的測試,Botanist 會使用 testrunner 程式庫,並分別收集輸出內容。當測試失敗,連結名稱為 stdio 時,您會看到這個輸出內容。testrunner 叫用的大多數測試會透過 SSH 連線至目標裝置,執行 run-test-suite。這會從測試環境收集 stdoutstderr 和記錄,並在內文中列印這些項目。

syslog.txt

syslog.txt 檔案包含 Botanist 在目標裝置上執行 ffx log 的輸出內容。

infra_and_test_std_and_klog.txt

infra_and_test_std_and_klog.txt 記錄包含 Swarming 工作執行指令的 stdoutstderr

通常包括以下內容:

  • Botanist 的記錄訊息。
  • 來自 netsvc 的核心記錄。這相當於 fx klog
  • testrunner 執行的測試的 stdoutstderr 和測試記錄。

這個匯總記錄會先透過 ffx debug symbolize 的等效項目執行,然後才會上傳並顯示在網頁 UI 中。

serial_log.txt

serial_log.txt 記錄包含目標裝置的序列記錄。

triage_output.txt

triage_output.txt 記錄包含在目標裝置收集的快照上執行分類工具的結果。

summary.json

summary.json 記錄檔會包含測試執行作業的結構化輸出摘要。

$debug 詳細資料

$debug 詳細資料包括在執行基礎架構的食譜步驟期間產生的偵錯記錄。

$execution details

範本步驟的 $execution 詳細資料,包括執行的指令和執行環境的詳細資料。這份記錄通常有助於在本機重現食譜步驟。