诊断标志
诊断标志会为单个子系统开启额外日志,而不会全局提高
logging.level。除非某个子系统检查该标志,否则标志不会生效。
How it works¶
- 标志是不区分大小写的字符串,从配置中的
diagnostics.flags以及OPENCLAW_DIAGNOSTICS环境变量覆盖项中解析,并去重、转为小写。 name.*匹配name本身以及name.下的所有内容(例如telegram.*匹配telegram.http)。*或all启用所有标志。- 在配置中修改
diagnostics.flags后,请重启 gateway;它不会热加载。
Known flags¶
| Flag | Enables |
|---|---|
telegram.http |
Telegram Bot API HTTP 错误日志 |
brave.http |
Brave Search 请求/响应/缓存日志 |
profiler |
回复阶段 profiler 和 Codex app-server profiler(两者) |
reply.profiler |
仅回复阶段 profiler |
codex.profiler |
仅 Codex app-server profiler |
health |
Gateway 健康探测/账户/绑定调试详情 |
ingress.timing |
会话加载、模型选择和模型目录计时 |
plugin.load-profile |
同步插件模块加载计时 |
timeline |
结构化 JSONL 时间线产物(见下文) |
Enable via config¶
多个标志:
Env override (one-off)¶
值按逗号或空白拆分。特殊值:
| Value | Effect |
|---|---|
0, false, off, none |
禁用所有标志,并覆盖配置 |
1, true, all, * |
启用所有标志 |
OPENCLAW_DIAGNOSTICS=0 会禁用该进程来自环境变量和配置的所有标志,适用于在
不编辑文件的情况下,临时静默配置中遗留开启的 profiler 标志。
Profiler flags¶
在没有 profiler 标志时,缓慢的回复准备和 Codex 启动会在默认日志级别记录: 某个阶段耗时至少 5 秒,或受跟踪的总耗时至少 10 秒,会发出警告。快速路径保持 安静。Profiler 标志会将计时阈值降低到每个阶段 500 毫秒、总计 1 秒,并启用 更多细节。
为一次 gateway 运行启用所有由 profiler 控制的 span:
仅启用回复分发 profiler span:
仅启用 Codex app-server 启动/工具/线程 profiler span:
profiler 会同时启用回复 profiler 和 Codex profiler;如需只启用其中一个,
请使用限定范围的标志名称。
或在配置中设置:
修改配置标志后,请重启 gateway。要禁用某个 profiler 标志,请将其从
diagnostics.flags 中移除并重启,或者以 OPENCLAW_DIAGNOSTICS=0 启动进程,
以覆盖该次运行的所有诊断标志。
Timeline artifacts¶
timeline 标志(别名:diagnostics.timeline)会将结构化的启动和运行时计时
事件写入 JSONL,供外部 QA 测试框架使用:
OPENCLAW_DIAGNOSTICS=timeline \
OPENCLAW_DIAGNOSTICS_TIMELINE_PATH=/tmp/openclaw-timeline.jsonl \
openclaw gateway run
或在配置中启用:
输出路径始终来自 OPENCLAW_DIAGNOSTICS_TIMELINE_PATH,即使标志本身在配置中
设置;没有用于路径的配置键。有关 OpenClaw 从哪里读取
OPENCLAW_DIAGNOSTICS、OPENCLAW_DIAGNOSTICS_TIMELINE_PATH 和
OPENCLAW_DIAGNOSTICS_EVENT_LOOP,以及优先级顺序,请参阅
环境变量。
当 timeline 仅从配置启用时,最早的配置加载 span 会缺失,因为 OpenClaw 尚未
读取配置;后续启动 span 会正常捕获。
Gateway 客户端命令会从源配置读取 timeline 标志,而无需打开共享状态数据库。 当 Gateway 离线时,这也有效。
OPENCLAW_DIAGNOSTICS=1、=all 和 =* 也会启用 timeline,因为它们会启用
所有标志。如果你只需要 JSONL 产物而不需要其他所有诊断标志,请优先使用限定
范围的 timeline 标志。
时间线中的事件循环延迟采样需要在 timeline 之外再额外开启一项:在启用
timeline 的基础上,设置 OPENCLAW_DIAGNOSTICS_EVENT_LOOP=1(或
on/true/yes)。
时间线记录使用 openclaw.diagnostics.v1 信封,并可包含进程 ID、阶段名称、
span 名称、持续时间、插件 ID、依赖数量、事件循环延迟采样、provider 操作名称、
子进程退出状态,以及启动错误名称/消息。请将时间线文件视为本地诊断产物;在
将其分享到机器之外之前,请先审查。
嵌入式模型请求会添加一个 provider.request.started 标记和一个终结
provider.request 记录,并通过 run 和 call/span ID 进行关联。在流式传输期间,
provider.request.activity 标记会使用现有的流进度报告器,对已观察到的 chunk
进行采样标记,最多每 30 秒一次。终结记录会在 timestamp 中保留请求开始时间,并
报告 terminalAtMs、最后观察到的 provider 回调/chunk 时间(如果观察到,则为
lastProviderActivityAtMs),以及有界的 terminalReason。Activity 包含簿记
chunk;它不能证明可见输出,延迟的结果结算也不会刷新已经观察到的终结 chunk。
未知原因或缺失的 activity 不是 provider、超时或 CPU 故障的证据。
model.recovery.decision 标记会报告现有尝试所有者已接受或已拒绝的恢复分支,以及重放安全性和先前工具结算布尔值。model.retry.decision 标记会解释重试所有者的预算、延迟和等待结果。这些标记不会添加提示词、工具参数、原始错误文本、模型路由或会话标识。它们不会更改重试或超时策略,并且仅通过现有可选时间线发出。
时间线写入会将具有相同目标的相邻事件批量写入有界的 64 KiB 缓冲区,并在下一个事件循环轮次、达到容量或进程正常退出时刷新。事件时间戳反映发出时间。写入仍为尽力而为;强制终止可能导致待处理输出丢失。外部测试框架应在进程退出后读取最终产物,并且不得在进程运行期间截断该产物。
日志存放位置¶
标志会将日志输出到标准诊断日志文件。默认情况下:
命名配置文件使用 /tmp/openclaw/openclaw-<profile>-YYYY-MM-DD.log;例如,--dev 使用 openclaw-dev-YYYY-MM-DD.log。
如果设置了 logging.file,则改用该路径。日志为 JSONL(每行一个 JSON 对象)。脱敏仍然适用;它始终开启。
有关完整的日志路径解析、轮转和脱敏模型,请参阅 日志。
提取日志¶
读取当前配置文件的最新日志文件:
筛选 Telegram HTTP 诊断信息:
筛选 Brave Search HTTP 诊断信息:
或在复现时跟踪:
对于远程网关,请改用 openclaw logs --follow(参见
/cli/logs)。
说明¶
- 如果将
logging.level设置为error、fatal或silent,由标志控制的日志 可能会被抑制。默认info即可。 brave.http会记录 Brave Search 请求 URL/查询参数、响应 状态/耗时以及缓存命中/未命中/写入事件。它不会记录 API 密钥 (作为请求头发送)或响应正文,但搜索查询可能敏感。- 标志可以保持启用;它们只影响特定子系统的 日志量。
- 使用 /logging 更改日志目标、级别和脱敏。
相关¶
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw