日志主要在与实时设备的交互(“在线”)环境中使用,或在 “离线”以及从设备过往执行中收集的日志。
订购
所有日志都附有时间戳,在记录
消息。LogSink
通过多种方式接收消息的顺序
用其时间戳表示
主要的 fuchsia.logger.Log
实现会对其通过 LogMany
发送的消息进行排序
fuchsia.logger.LogListenerSafe
上的方法。无论何时发送
将已收集的消息传递给新连接的监听器。但是,当邮件首次到达时,
无序的时间戳,任何活跃的监听器都将以任意顺序接收这些时间戳。工具
应显示对 fuchsia.logger/LogListenerSafe.Log
的连续调用累积的日志
当收到的消息没有按严格线性排序时,提醒用户。
在线
由于有两个缓冲区可存储日志,因此当您 实时设备。如需详细了解日志的存储位置,请参阅概念:存储。
syslog 和内核日志
在开发期间,默认运行 ffx log
是为了查看所有日志。从本质上讲,
命令会运行 log_listener
程序,并输出系统中的每条消息
日志。其中包括从 klog 转发的内容。
log_listener
通过 fuchsia.logger.Log
接收日志,
fuchsia.logger.LogListenerSafe
协议。
此外,syslog 的一些日志会输出到串行控制台。默认情况下,该文件包含
和 driver_manager
日志。
格式
默认情况下,log_listener
会发出以下格式的行:
[seconds][pid][tid][tags] LEVEL: message
默认情况下,时间戳来自单调时钟,采用微秒格式 。
如果显示“出了点问题”的消息由 my-component 在 process=1902 中写入了警告级别 且 thread=1904 为 278.14,默认输出为:
[278.14][1902][1904][my-component] WARN: something happened
log_listener
具有 --hide_metadata
和 --pretty
标志,用于减少输出的元数据。
和颜色代码日志行。使用这些标志,部分元数据会被隐藏
(PID、TID 等),而其他则会删减(时间戳、严重性)。
例如,如果消息“出了点问题”由 my-component 在 WARN 级别输出 time=278.14,则优质输出将如下所示:
[278.14][my-component][W] something happened
在有可用正在运行的设备的情况下,运行 ffx log --help
以查看用于修改输出格式的选项。
fx test
在后台,fx test
会调用 run-test-suite
,后者会收集隔离的 stdout
、stderr
和
来自测试组件的 LogSink
个连接,内嵌输出并阻止显示输出
写入全局日志缓冲区
对于尚未组件的测试,不会执行任何日志拦截。
仅限内核日志
klog 会通过内核控制台输出并作为序列号进行。
它还由 netsvc 通过 UDP 转发,系统会在您运行 fx klog
时输出内容。正在运行
如果您的 SSH 会话失败,或在后台终端运行 fx klog
,这可能是获取日志的好方法,
备份。ffx log
。
如果以上两种方法都不可行,您还可以直接在设备 shell 中使用 dlog
转储
以及内核调试日志
格式
内核日志的转储程序按以下格式发出行:
[timestamp] pid:tid> message
时间戳来自单调时钟。格式为 5 位数(前导零) 秒和三位数表示毫秒(尾随零)。
进程和线程 koid 各有 5 位数(前导零)。
如果显示“出了点问题”的消息写入进程 1902 和线程 1904,时间 278.14, 生成的输出将是:
[00278.140] 01902:01904> something happened
fx pretty_serial
命令可用于减少 klog 和颜色代码输出的元数据
日志行。使用此命令,系统会隐藏一些元数据(PID、TID、文件名等)
其他的则会被删减(时间戳、严重性)。
应从模拟器或其他来源通过管道输入串行输出:
ffx emu start --console | ffx debug symbolize
例如,如果消息“出了点问题”被输出到 klog 警告级别 my-component 的值设为 278.14,美观的输出将如下所示:
[278.14][my-component][W] something happened
例如,如果消息“出了点问题”被未知组件输出到 klog, 在 time=278.14 时严重性未知,则 Pretty 输出将如下所示:
[278.14] something happened
线下:CQ/GI
运行测试时,Swarming 聊天机器人会调用 botanist,后者会收集多个输出流
呈现的内容stdout
和“迁移任务”中呈现了 stderr
的植物学家
UI”消息。
对于单个测试可执行文件,植物学家会使用 testrunner lib 并单独收集该输出。
在测试失败后,可以看到此输出,其中包含名为 stdio
的链接。大多数
testrunner 通过 SSH 调用运行 run-test-suite
,以连接到目标设备。这会收集
测试环境中的 stdout、stderr 和日志,并内嵌输出它们。
syslog.txt
Botanist 在目标设备上运行 log_listener
,并将该输出保存到 syslog.txt。这是
相当于在开发机器上运行 ffx log
。
infra_and_test_std_and_klog.txt
此日志包含由 Swarming 任务运行的命令的 stdout 和 stderr。 通常,这包括以下值得注意的项,所有这些项都是交错的:
- botanist 的日志消息
- 来自 netsvc 的内核日志(等同于
fx klog
) - testrunner 运行的
stdout
和stderr
测试
在上传之前,此汇总日志通过等效的 ffx debug symbolize
运行。