访问日志

与其他诊断一样,您可以从 ArchiveAccessor 的 ArchiveAccessor 协议读取日志。 如需了解有关 API 及其用法的常规信息,请参阅 ArchiveAccessor 参考

参数

系统会将 StreamParameters 传递给 StreamDiagnostics 方法,以初始化 BatchIterator

DataType

发送 LOGS 数据类型以向 Archivist 请求日志。

StreamMode

您可以通过 SNAPSHOTSNAPSHOT_THEN_SUBSCRIBESUBSCRIBE 模式访问日志。

格式

目前仅支持 JSON

ClientSelectorConfiguration

目前支持只有 select_all=true

batch_retrieval_timeout_seconds

此选项在请求日志时无效,因为在日志查询期间, 归档管理员必须等待生成日志的组件。

结果

结果以 vector<FormattedContent> 形式返回,其中包含每个条目的变体 与请求的格式匹配,但 JSON 是目前唯一支持的格式。

缓冲区内容

每个缓冲区都包含一个顶级数组,其中的所有元素都作为对象:

[
    {
        "metadata": { ... },
        "payload": { ... }
    },
    {
        "metadata": { ... },
        "payload": { ... }
    },
    ...
]

第二层嵌套可让档案管理员高效地打包日志消息,同时还能使用 使用同一个 API 来处理经过解析的 VMO 与返回的 1 对 1 映射的结果 VMO。

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,具体取决于 消息被放置的位置

当生产组件溢出其日志套接字时,会递增用于 后续成功发送,以填充日志元数据中的一个字段。档案保管员进行了跟踪 元数据,但无法得知组件丢弃日志记录的信息,除非通过稍后的日志 来自该组件的记录。元数据会以相同的形式作为错误传递给客户端 字段。

如果邮件由于缓冲区限制而被存档员丢弃,则以合成 消息,以确保即使给定提供方未记录,客户端也会收到通知 。

旧版 API

Archivist 采用 fuchsia.logger.Log 协议,可让客户端读取文本中的日志 格式。此 API 已被 fuchsia.diagnostics.ArchiveAccessor 取代,并将在 。