存取記錄檔

如同其他診斷,您可以透過 Archivist 的 ArchiveAccessor 通訊協定讀取記錄。如需 API 及其用途的一般資訊,請參閱 ArchiveAccessor 參考資料

參數

StreamParameters 會傳遞到 StreamDiagnostics 方法,以初始化 BatchIterator

DataType

傳送 LOGS 資料類型以要求 Archivist 的記錄。

StreamMode

記錄提供超過 SNAPSHOTSNAPSHOT_THEN_SUBSCRIBESUBSCRIBE 模式。

格式

目前僅支援 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 中的其他資料類型,每個物件都是由多個欄位組成,不過 metadatapayload 的內容與其他來源不同:

{
    "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 取代,並將於日後刪除。