記錄主要會在互動式 線上情境中使用,其中包含實體 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.14
的 my-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>
則是 TRACE
、DEBUG
、INFO
、WARN
、ERROR
和 FATAL
之一。
舉例來說,如果您執行以下指令:
ffx log --set-severity netstack#DEBUG
core/network/netstack
元件會開始發出 DEBUG
記錄,而 ffx log
輸出內容會列印包含 netstack
的 DEBUG
記錄的記錄串流。當指令停止 (例如透過 Ctrl-C) 時,元件會恢復以預設最低嚴重性 (通常為 INFO
) 發出記錄。
這項功能也適用於測試。詳情請參閱「設定最低記錄嚴重性」。
fx test
實際上,fx test
會呼叫 run-test-suite
,後者會從測試元件收集隔離的 stdout
、stderr
和 LogSink
連線,並在內文中列印輸出內容,避免這些內容顯示在全域記錄緩衝區中。
如果測試尚未成為元件,就不會攔截記錄。
如要進一步瞭解密封測試,請參閱「密封整合測試」。
核心記錄檔
klog
或 debuglog 會透過核心控制台和序列控制台列印。
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 happened
在 278.14
時間點由不明元件以不明嚴重性列印到 klog,則精簡輸出內容會如下所示:
[278.14] Something happened
將系統記錄檔傳送至序列
系統會將 syslog 中的部分記錄列印到序列控制台。根據預設,這會包括 bootstrap
領域下的所有元件,例如驅動程式和 driver_manager
。您可以透過診斷組態設定新增其他元件。
離線:CQ/CI/LUCI
執行測試時,Swarming 機器人會叫用 botanist,收集多個輸出串流,並在網頁版 UI 中顯示。在網頁版 UI 中,「Swarming task UI」會顯示植物學家的 stdout
和 stderr
。
針對個別可執行的測試,Botanist 會使用 testrunner 程式庫,並分別收集輸出內容。當測試失敗,連結名稱為 stdio
時,您會看到這個輸出內容。testrunner
叫用的大多數測試會透過 SSH 連線至目標裝置,執行 run-test-suite
。這會從測試環境收集 stdout
、stderr
和記錄,並在內文中列印這些項目。
syslog.txt
syslog.txt
檔案包含 Botanist 在目標裝置上執行 ffx log
的輸出內容。
infra_and_test_std_and_klog.txt
infra_and_test_std_and_klog.txt
記錄包含 Swarming 工作執行指令的 stdout
和 stderr
。
通常包括以下內容:
這個匯總記錄會先透過 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
詳細資料,包括執行的指令和執行環境的詳細資料。這份記錄通常有助於在本機重現食譜步驟。