当 Fuchsia 组件想要写入日志时,必须获取其环境中的 fuchsia.logger.LogSink
(通常由 Archivist 实例提供)的连接。
典型的 Fuchsia 服务连接是匿名的,因此服务器和客户端之间没有相关的标识信息。客户端只会看到其命名空间中的服务(例如 /svc/fuchsia.logger.LogSink
),而服务器会看到对其传入命名空间的匿名 Open()
请求。
同时,了解日志的来源也很重要,因为可信的出处元数据可以更好地监控、存储、查询和呈现日志。系统通过一项名为“归因日志记录”的功能来解决此问题,该功能可标识传入 LogSink
连接的来源。
组件管理器:CapabilityRequested 事件
Archivist 的清单会像其他服务功能一样 expose
fuchsia.logger.LogSink
,但它也会 use
来自框架的事件,将其绑定到其命名空间中的服务:
{
event: "capability_requested",
from: "framework",
filter: { name: "fuchsia.logger.LogSink" },
},
{
event_stream: "EventStream",
subscriptions: [
{
event: "capability_requested",
mode: "async",
}
],
},
这会导致组件管理器将来自默认的 fuchsia.io
命名空间协议的传入请求重定向到 fuchsia.sys2.EventStream
协议。Archivist 通过此协议接收 Event,与 LogConnectionListener
类似,从组件管理器发送的 ComponentDescriptor 以及 LogSink
通道的句柄中检索归因元数据。描述符中包含的名称是在功能路由期间构建的。
为 LogSink
配置 capability_requested
事件不会影响功能路由本身,而只会将通道作为 Event(而非 Open())传送给 Archivist。这意味着,对于组件拓扑的其余部分,用于传递归因 LogSink
的 CML 保持不变。