Skip to content

日志

日志用于排查设备智能体创建、设备接入、对话控制、IM 接入、语音和视觉等运行问题。你可以在控制台查看和筛选记录,也可以直接读取本地日志文件。

打开日志页面

在控制台左侧导航点击 日志,进入 /workspace/logs。页面主要分为两部分:

区域用途
日志文件查看当前可用的日志文件,文件名通常类似 device-agent-2026-05-11.log
日志记录查看选中文件里的最近记录,默认加载最近 200 条。

如果页面提示“文件日志已关闭”,点击右上角 日志配置,启用文件日志并保存。启用后,新记录会开始写入日志文件;启用前的历史记录不会补写。

日志页面

本地日志文件

文件日志默认写入运行时目录下的 logs 子目录:

运行方式默认目录
仓库源码开发<repo>/.device_agent/logs
已安装的生产二进制~/.device_agent/logs

Agent Gateway 启动时会打印 Runtime HomeLOG_DIR=logs 会相对这个目录解析;如果 LOG_DIR 是绝对路径,则直接写入该路径。注意目录名是 .device_agent

同一天日志按大小切分,文件名如下:

text
device-agent-2026-05-11.log
device-agent-2026-05-11.001.log
device-agent-2026-05-11.002.log

device-agent-YYYY-MM-DD.log 是当天第一个文件;超过 LOG_MAX_SIZE_MB 后继续写入 .001.log.002.log 等分片。日志页面只列出符合这个命名规则的文件。

日志记录格式

日志文件是 JSON Lines,每行是一条完整 JSON 记录。

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 }]
}

常用字段如下:

字段说明
timeISO 时间,始终按 UTC 写入。
leveldebuginfowarnerror
module产生日志的后端模块,例如 GatewayHTTPMQTTAgentToolsSkillsVoiceNTPA2A-Channel
msg日志消息。
requestId / sessionId / traceId串联一次请求、对话或工具调用。
namespace / productId / deviceId / topic定位租户、设备和 MQTT 主题。
method / path / statusCode / durationMsHTTP 或服务调用相关信息。
provider / tool模型服务、语音服务或工具执行相关信息。
args / error补充上下文和异常信息,已做脱敏和截断。

包含 apiKeyauthorizationcookiepasswordsecrettokenprivateKey 等敏感含义的字段会写成 [redacted]。普通业务数据不会自动移除,分享日志前仍要检查设备 ID、主题、状态值和第三方用户 ID。

本地排查命令

在源码开发环境中,从仓库根目录查看日志:

bash
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 条不够时,继续加载更早的记录。
按级别筛选只看 warnerror,快速定位异常。
按消息搜索搜索错误关键词、平台名称、MQTT 主题或模型服务返回信息。
按模块筛选只看某类能力的记录,例如 MQTT、HTTP、Voice、Tools、A2A。
按请求 ID 搜索对一次 HTTP 请求、对话或工具调用做链路排查。
按设备 ID 搜索只查看某台设备的上报、命令和响应记录。

每条记录都可以展开查看完整 JSON。需要分享单条记录时,点击右侧复制按钮;需要导出当前文件时,点击右上角下载按钮。

日志级别

级别说明
debug最详细,适合临时排查复杂问题。记录量较大,不建议长期打开。
info默认推荐级别,记录启动、连接、请求和主要运行状态。
warn只记录可能影响功能但未必导致失败的问题。
error只记录失败和异常。

日常使用建议保持 info。如果某个问题难以复现,可以临时切到 debug,复现后再调回 info

配置日志

在日志页面点击 日志配置,可以调整:

配置作用
级别控制记录多少日志。
控制台日志是否在服务启动终端中输出日志。
文件日志是否写入可在日志页面查看和下载的日志文件。
日志目录文件日志保存位置。相对路径会放在设备智能体数据目录下。
单文件上限单个日志文件达到上限后会自动切分。
保留天数超过保留天数的旧日志会自动清理。
总容量上限所有日志文件超过上限后,会优先删除更旧的文件。
文件日期时区控制日志文件名按系统时区还是 UTC 日期生成。

保存后的日志配置会写入本地配置。.env 中的同名配置仍会在服务启动时覆盖控制台保存的值。

常用 .env 配置如下:

bash
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 等敏感信息。常见密钥字段会被脱敏,但业务数据仍可能出现在日志消息中。