Claude Code 的过程观测有几个层次,从轻量到重型都有,下面分层介绍。
一、交互模式下的即时查看
--debug 标志 — 最直接的方式
启动时加上 --debug 可以看到 API 调用、工具调用、执行耗时等详细信息,输出到 stderr:
1 | claude --debug # 完整 debug 输出 |
--verbose 则是更轻量的开关,可在配置里持久化,或启动时传入。
二、读取本地 JSONL 日志(离线回溯)
Claude Code 的 session transcript 以 JSONL 格式存储在 ~/.claude/projects/ 目录下,里面记录了每次 tool call、thinking step、token 用量等内容。原始文件可读性较差(是 escaped JSON),但可以直接 cat 或用 jq 解析。
社区工具 claude-devtools 可以解析这些文件,它会重建完整的 session transcript —— 每个 tool call 展开、thinking step 可见、token 用量按 turn 分解,subagent 执行以树状结构渲染。
三、通过 Hooks 实时拦截(适合自定义观测)
Hooks 是 Claude Code 的扩展点,可以在 PreToolUse、PostToolUse 等生命周期事件上挂载脚本。这是目前最灵活的方案——你可以在 hook 脚本里把 tool call 的输入/输出写到自己的日志系统,或触发告警。
1 | // .claude/settings.json |
Hook 脚本通过 stdin 收到 JSON 事件,包含 tool 名称、参数、结果等。
四、OpenTelemetry 导出(生产/团队级别)
Claude Code CLI 内置了 OpenTelemetry instrumentation:它会在每次 model request 和 tool execution 上记录 span,发出 token/cost 计数的 metrics,并为 prompt 和 tool result 发出结构化 log event。
开启方式:
1 | export CLAUDE_CODE_ENABLE_TELEMETRY=1 |
支持导出到任何接受 OTLP 协议的后端,比如 Honeycomb、Datadog、Grafana、Langfuse,或自托管的 collector。
小结
| 需求 | 方案 |
|---|---|
| 临时调试某次执行 | claude --debug |
| 事后回溯 session | 读 ~/.claude/projects/*.jsonl 或用 claude-devtools |
| 自定义日志/告警 | Hooks + 脚本 |
| 团队监控 / 成本追踪 | OpenTelemetry 导出 |