如同其他診斷,您可以透過 Archivist 的 ArchiveAccessor 通訊協定讀取記錄。如需 API 及其用途的一般資訊,請參閱 ArchiveAccessor 參考資料。
參數
StreamParameters 會傳遞到 StreamDiagnostics
方法,以初始化 BatchIterator。
DataType
傳送 LOGS
資料類型以要求 Archivist 的記錄。
StreamMode
記錄提供超過 SNAPSHOT
、SNAPSHOT_THEN_SUBSCRIBE
和 SUBSCRIBE
模式。
格式
目前僅支援 JSON
。
ClientSelectorConfiguration
系統目前僅支援 select_all=true
。
batch_retrieval_timeout_seconds
此選項在要求記錄時沒有任何作用,因為在記錄查詢期間,Archivist 無須等待產生記錄的元件。
成果
結果會以 vector<FormattedContent>
的形式傳回,且每個項目的變數與要求的格式相符,但 JSON 是目前唯一支援的格式。
緩衝區內容
每個緩衝區都包含頂層陣列,而其所有元素都是物件:
[
{
"metadata": { ... },
"payload": { ... }
},
{
"metadata": { ... },
"payload": { ... }
},
...
]
第二層巢狀結構可讓 Archivist 更有效率地封裝記錄訊息,同時使用相同的 API 提供檢查結果,在剖析的 VMO 和傳回的 VMO 之間進行 1:1 的對應。
JSON 物件內容
陣列中的每個 JSON 物件都是一個記錄訊息或事件。如同 ArchiveAccessor 中的其他資料類型,每個物件都是由多個欄位組成,不過 metadata
和 payload
的內容與其他來源不同:
{
"version": 1,
"moniker": "core/network/netstack",
"metadata": {
"timestamp": 1234567890,
"severity": "INFO",
"component_url": "fuchsia-pkg://fuchsia.com/network#meta/netstack.cm",
"size_bytes": 123
},
"payload": {
"root": {
"pid": 78,
"tid": 78,
"tag": "netstack",
"message": "something happened!"
}
}
}
時間戳記
系統使用核心的單記時鐘來記錄記錄時間,並在不經修改的情況下以無正負號的整數傳送。
捨棄的記錄檔
已捨棄的記錄會在結果物件的 metadata.errors
欄位中傳輸,而該物件為陣列 (如有):
{
"metadata": {
...
"errors": [
{
"dropped_logs": {
"count": 3
}
}
]
}
}
如果訊息在錯誤中發生捨棄記錄,則訊息可能沒有關聯 payload
,具體取決於訊息捨棄的位置。
產生元件溢出記錄通訊端時,就會遞增一個計數器,在後續成功傳送時,用來填入記錄中繼資料中的欄位。Archivist 會追蹤這些中繼資料,但無法瞭解某個元件捨棄記錄檔記錄,但透過該元件的稍後記錄記錄除外。中繼資料會以相同格式,以已填入記錄檔記錄中的錯誤欄位的形式傳遞至用戶端。
當 Archivist 因緩衝區限製而捨棄訊息時,此錯誤會在合成的訊息中傳送,且沒有酬載,以確保即使指定生產端未再次登入,用戶端也會收到通知。
舊版 API
Archivist 提供 fuchsia.logger.Log
通訊協定,可讓用戶端讀取文字格式的記錄。這個 API 已由 fuchsia.diagnostics.ArchiveAccessor
取代,並將於日後刪除。