日志
日志用于排查设备智能体创建、设备接入、对话控制、IM 接入、语音和视觉等运行问题。你可以在控制台查看和筛选记录,也可以直接读取本地日志文件。
打开日志页面
在控制台左侧导航点击 日志,进入 /workspace/logs。页面主要分为两部分:
| 区域 | 用途 |
|---|---|
| 日志文件 | 查看当前可用的日志文件,文件名通常类似 device-agent-2026-05-11.log。 |
| 日志记录 | 查看选中文件里的最近记录,默认加载最近 200 条。 |
如果页面提示“文件日志已关闭”,点击右上角 日志配置,启用文件日志并保存。启用后,新记录会开始写入日志文件;启用前的历史记录不会补写。

本地日志文件
文件日志默认写入运行时目录下的 logs 子目录:
| 运行方式 | 默认目录 |
|---|---|
| 仓库源码开发 | <repo>/.device_agent/logs |
| 已安装的生产二进制 | ~/.device_agent/logs |
Agent Gateway 启动时会打印 Runtime Home。LOG_DIR=logs 会相对这个目录解析;如果 LOG_DIR 是绝对路径,则直接写入该路径。注意目录名是 .device_agent。
同一天日志按大小切分,文件名如下:
device-agent-2026-05-11.log
device-agent-2026-05-11.001.log
device-agent-2026-05-11.002.logdevice-agent-YYYY-MM-DD.log 是当天第一个文件;超过 LOG_MAX_SIZE_MB 后继续写入 .001.log、.002.log 等分片。日志页面只列出符合这个命名规则的文件。
日志记录格式
日志文件是 JSON Lines,每行是一条完整 JSON 记录。
{
"time": "2026-05-11T05:20:12.123Z",
"level": "info",
"module": "MQTT",
"msg": "device connected",
"requestId": "req-...",
"productId": "product-001",
"deviceId": "device-001",
"topic": "device-agent/product-001/device/device-001/out",
"args": [{ "durationMs": 18 }]
}常用字段如下:
| 字段 | 说明 |
|---|---|
time | ISO 时间,始终按 UTC 写入。 |
level | debug、info、warn 或 error。 |
module | 产生日志的后端模块,例如 Gateway、HTTP、MQTT、Agent、Tools、Skills、Voice、NTP、A2A-Channel。 |
msg | 日志消息。 |
requestId / sessionId / traceId | 串联一次请求、对话或工具调用。 |
namespace / productId / deviceId / topic | 定位租户、设备和 MQTT 主题。 |
method / path / statusCode / durationMs | HTTP 或服务调用相关信息。 |
provider / tool | 模型服务、语音服务或工具执行相关信息。 |
args / error | 补充上下文和异常信息,已做脱敏和截断。 |
包含 apiKey、authorization、cookie、password、secret、token、privateKey 等敏感含义的字段会写成 [redacted]。普通业务数据不会自动移除,分享日志前仍要检查设备 ID、主题、状态值和第三方用户 ID。
本地排查命令
在源码开发环境中,从仓库根目录查看日志:
ls -lh .device_agent/logs
tail -n 200 .device_agent/logs/device-agent-2026-05-11.log
jq 'select(.level == "error")' .device_agent/logs/device-agent-2026-05-11.log
jq 'select(.deviceId == "device-001") | {time, level, module, msg, topic}' \
.device_agent/logs/device-agent-2026-05-11.log
jq 'select(.requestId == "req-...")' .device_agent/logs/device-agent-2026-05-11.log日志页面使用这些本地接口:
| 接口 | 用途 |
|---|---|
GET /api/logs/files | 列出可读日志文件。 |
GET /api/logs/tail?file=device-agent-2026-05-11.log&lines=200 | 读取指定文件末尾记录,lines 最大为 1000。 |
GET /api/logs/tail?file=device-agent-2026-05-11.log&before=<offset> | 继续读取更早记录,before 使用上一次响应里的 nextBeforeOffset。 |
GET /api/logs/download?file=device-agent-2026-05-11.log | 下载指定日志文件。 |
查看和筛选记录
选中一个日志文件后,可以用以下方式定位问题:
| 操作 | 适合场景 |
|---|---|
| 刷新 | 设备刚上线、刚下发命令或刚完成一次对话后,刷新查看最新记录。 |
| 查看更早记录 | 当前 200 条不够时,继续加载更早的记录。 |
| 按级别筛选 | 只看 warn 或 error,快速定位异常。 |
| 按消息搜索 | 搜索错误关键词、平台名称、MQTT 主题或模型服务返回信息。 |
| 按模块筛选 | 只看某类能力的记录,例如 MQTT、HTTP、Voice、Tools、A2A。 |
| 按请求 ID 搜索 | 对一次 HTTP 请求、对话或工具调用做链路排查。 |
| 按设备 ID 搜索 | 只查看某台设备的上报、命令和响应记录。 |
每条记录都可以展开查看完整 JSON。需要分享单条记录时,点击右侧复制按钮;需要导出当前文件时,点击右上角下载按钮。
日志级别
| 级别 | 说明 |
|---|---|
debug | 最详细,适合临时排查复杂问题。记录量较大,不建议长期打开。 |
info | 默认推荐级别,记录启动、连接、请求和主要运行状态。 |
warn | 只记录可能影响功能但未必导致失败的问题。 |
error | 只记录失败和异常。 |
日常使用建议保持 info。如果某个问题难以复现,可以临时切到 debug,复现后再调回 info。
配置日志
在日志页面点击 日志配置,可以调整:
| 配置 | 作用 |
|---|---|
| 级别 | 控制记录多少日志。 |
| 控制台日志 | 是否在服务启动终端中输出日志。 |
| 文件日志 | 是否写入可在日志页面查看和下载的日志文件。 |
| 日志目录 | 文件日志保存位置。相对路径会放在设备智能体数据目录下。 |
| 单文件上限 | 单个日志文件达到上限后会自动切分。 |
| 保留天数 | 超过保留天数的旧日志会自动清理。 |
| 总容量上限 | 所有日志文件超过上限后,会优先删除更旧的文件。 |
| 文件日期时区 | 控制日志文件名按系统时区还是 UTC 日期生成。 |
保存后的日志配置会写入本地配置。.env 中的同名配置仍会在服务启动时覆盖控制台保存的值。
常用 .env 配置如下:
LOG_LEVEL=info
LOG_CONSOLE_ENABLED=true
LOG_FILE_ENABLED=true
LOG_DIR=logs
LOG_MAX_SIZE_MB=50
LOG_RETENTION_DAYS=14
LOG_MAX_TOTAL_SIZE_MB=1024
LOG_TIMEZONE=system更多配置入口见 配置。
常见排查路径
| 问题 | 建议查看 |
|---|---|
| 设备没有出现在列表中 | 按设备 ID 搜索,确认设备是否连接 MQTT、上报在线状态或遥测。 |
| 对话控制没有生效 | 搜索设备 ID 或请求 ID,查看命令是否下发、设备是否返回响应。 |
| IM 机器人没有回复 | 按模块或平台名称搜索,查看平台凭证、白名单、消息接收和回复是否正常。 |
| 语音没有识别或没有播报 | 按语音相关模块筛选,查看语音服务、会话和识别结果。 |
| 工具或技能没有执行 | 按工具相关模块筛选,查看工具加载、权限和执行结果。 |
| 模型服务返回异常 | 按 error 或模型服务名称搜索,查看请求失败、鉴权失败或超时信息。 |
下载或分享日志前,先确认日志中是否包含设备 ID、主题、状态值、第三方平台用户 ID 等敏感信息。常见密钥字段会被脱敏,但业务数据仍可能出现在日志消息中。