概述
本篇实践介绍如何导出 Wuji Hand 2 的设备日志并保存为 JSONL 文件。应用场景包括收集故障现场信息、分析固件事件和提供问题排查材料。 对应的 Python 示例为 5.export_flash_logs.py,C 示例为 5_export_flash_logs.c。 诊断与日志的接口定义见诊断与日志,本页说明集成流程和运行时行为。前置条件
硬件
软件
数据流
每次调用都是全量导出并写新文件。 没有「先查有多少条」这样的接口,也没有增量导出。输出位置
out_dir 默认为 None,写入 SDK 的默认目录 ~/.wuji/logs,也就是 SDK 自身日志所在的位置,文件名带 flash_ 前缀:
out_dir 可以改到别处。
每行的字段
集成步骤
1. 发现并连接目标设备
Python 通过scan() 筛选 DeviceType.WujiHand2,确认结果非空后调用 connect(sn=...)。C 先初始化 SDK,使用 wuji_scan() 筛选 WUJI_DEVICE_TYPE_WUJI_HAND_2,再以序列号调用 wuji_connect()。导出不需要使能电机。
2. 导出日志并取得结果
一次调用完成全量导出,同时返回文件路径和帧数。Python 传入None、C 传入 NULL 时使用 SDK 默认目录。
- Python
- C
result。失败时输出对象未被填写,应读取错误并进入设备清理路径。
3. 检查文件并断开连接
Python 示例在帧数非零时读取 JSONL 首行,确认内容可解析。C 示例输出文件路径和帧数,应用可按该路径继续读取文件。finally 中调用 manager.disconnect_all()。C 依次调用 wuji_dev_disconnect(dev)、wuji_dev_release(dev) 和 wuji_shutdown()。
运行与输出
- Python
- C
实测数据
在右手 Wuji Hand 2 上实跑:
导出内容的构成:
绝大多数是
sboard_app 的周期性状态行,形如 [B2] T:25 R:20 g:0 bc:0/0 ...,以及节点心跳 nodes 4/5: [1:hb=0 2:hb=0 ...]。排查问题时先按 level 过滤出 Warn 及以上,再按 target 定位模块。
注意事项
扩展用法
过滤关注的内容
JSONL 每行独立,用jq 直接筛:
导出到指定目录
out_dir 参数即可。默认写进 ~/.wuji/logs,会和 SDK 自身日志混在一起,靠 flash_ 前缀区分。
与 SDK 主机日志的关系
两者视角不同。闪存日志是固件视角,记录总线、节点心跳、服务端状态。SDK 日志在同一目录下,记录主机侧的连接、订阅、发布行为。排查连接类问题时两边对照时间戳看。不要在实时循环里调用
全量导出会拉取整个环形缓冲区,实测千余条约 3 秒。这是排查工具,不是监控手段。持续监控请订阅joint_diagnostics。