3.8 KiB
3.8 KiB
L5 · 自诊断:日志规范与 Agent 自迭代闭环
本项目的愿景是「Agent 写插件、Agent 排障、Agent 迭代」。达成的前提是一切可观测:宿主日志、插件日志、渲染层错误都落盘且结构化。这一篇讲日志从哪来、到哪去、Agent 怎么用它排障。
1. 日志在哪
userData/logs/main-YYYY-MM-DD.log ← 唯一日志文件,按天滚动,保留 14 天
Windows:C:\Users\<你>\AppData\Roaming\@aso\desktop\logs\
(Agent 侧:pi 的 read/grep 工具可直接读这个路径——排障第一步永远是读它。)
级别:dev 默认 debug,打包版默认 info;环境变量 ASO_LOG_LEVEL=debug|info|warn|error 覆盖。
2. 行格式
<ISO时间> <LEVEL> [<scope>] <message> k=v k=v
2026-09-10T10:21:33.120Z INFO [plugin-host] plugin activated pluginId=demo-ui source=external
2026-09-10T10:21:33.451Z INFO [plugin] settings changed pluginId=demo-ui endpoint=staging
2026-09-10T10:21:40.002Z ERROR [ipc] ipc failed channel=plugins:setEnabled ms=1203 err=Error: runtime rebuild failed
scope 一览:main / plugin-host / plugin(所有插件日志,带 pluginId 字段)/ agent-service / browser / ipc / renderer / logger。
3. 插件怎么写日志:api.log.*
export default function definePlugin(api) {
const log = api.log // 自动带 pluginId 字段,进同一文件
api.log.info('activation payload', { tools: 3, mode: 'standard' })
try {
risky()
} catch (err) {
api.log.error('risky step failed', { step: 'connect', err }) // err 会被序列化成 stack
}
}
埋点规范(Agent 排障依赖这些惯例):
- 激活时:
info一条「我装了什么」(能力清单/配置摘要) - 关键决策与外部调用:
info/debug+ 结果字段 - 一切 catch:
error+err字段——禁止吞错不记 - message 用英文短句、kv 用结构化字段(便于 grep
pluginId=xxx)
4. 宿主替你记录的(不用自己写)
| 事件 | scope | 级别 |
|---|---|---|
| 插件扫描/装载/激活/禁用/重载全链路 | plugin-host | info |
| main.mjs 加载失败 / 激活失败 | plugin-host | error |
| 设置值变更 / 一级入口切换 / 按钮动作 | plugin-host | info/debug |
| 全部 73 个 IPC 通道调用(成功 debug 含耗时,失败 error) | ipc | debug/error |
| Agent 回合开始/结束/结算、运行时重建 | agent-service | info/error |
| 渲染层 console(含插件 renderer 模块与 iframe 页)、白屏、崩溃 | renderer | debug/error |
| 进程级 uncaughtException / unhandledRejection | logger | error |
5. Agent 排障闭环(自迭代的核心流程)
发现问题(用户反馈 / 日志 error)
↓ 读 userData/logs/main-<今天>.log
↓ grep pluginId=<自己的id> 与 ERROR
↓ 对照本文第 4 节判断:装载失败?激活抛错?IPC 超时?渲染崩溃?
↓ 改插件代码(L0-L4 的对应章节)
↓ 触发重载(设置页开关 / 重启)→ 再读日志验证新一次 plugin activated
↓ 循环直到日志干净
写插件时请遵守:每个可能失败的操作都有日志、每条 error 都能定位到步骤。这是 Agent 能替你维护插件的最低要求。
6. 快速自查清单
- 装载了吗:
external main loaded pluginId=<id> - 激活了吗:
plugin activated pluginId=<id> - 有报错吗:
ERROR+pluginId=<id> - IPC 通吗:
ipc failed channel=…是宿主问题还是插件问题 - 渲染崩了吗:
renderer console中[window.onerror]/[unhandledrejection]
上一篇 L4 · 回到 索引 · 契约全集 ../plugins.md · 视觉规范 DESIGN.md