Daemon 状态与日志
选择轻量状态、按需磁盘扫描和轮转日志,避免把未知结果当清理成功。
This page has not been translated into English yet. The original Chinese version is shown below.
优先使用轻量实时状态,再在具体问题出现时读取完整诊断或磁盘历史。某些看似统计的接口会扫描全部本地会话文件,不适合紧密轮询。
状态选择
| 路由 | 内容与成本 |
|---|---|
| GET /daemon/status | 默认 summary,仅内存状态,不为诊断启动 ACP |
| GET /daemon/status?detail=full | 会话、ACP、auth flow、工作区和日志器细节 |
| GET /session/:id/status | 单 live 会话的 clientCount、hasActivePrompt 等;不存在为 404 |
| GET /workspace/mcp、/skills、/providers | live ACP 快照;空闲未初始化时 initialized: false,不主动启动 |
| GET /workspace/env | daemon 环境摘要,始终 initialized: true,不查询 ACP |
| GET /workspace/preflight | daemon 检查始终有值,空闲 ACP 项为 not_started |
/session/:id/status 的 createdAt 是 live 创建时间。当前协议中的 updatedAt 是可选的 daemon 活动水位:只有本 bridge 中实际进入运行的 prompt 产生正式终态后才推进,排队、心跳和流式 chunk 不推进;恢复后首次终态之前可缺失,也不证明 transcript 已落盘。完整列表还可合并更晚的持久时间,因此状态与列表不能按字节等同。
session/resources 返回该 live session 自己 Config 中已脱敏的 Skill/MCP 状态,适合 worktree 或有效目录与基础工作区不同的情况;不含工作区 MCP 认证、池、预算和发现错误详情。先检查 session_resources。
目录统计与轮询
/workspace/:id/session-info 及复数工作区对应接口返回持久 active/archived/total 和可用的 live 数量。它扫描会话 JSONL,始终标 expensive: true、cost: disk_scan;truncated: true 时持久数量仅是下界。未信任 secondary 的统计不查询 live bridge,因此可省略 live。
该接口适合手动刷新,不要每次侧栏渲染或定时快速调用。分页目录用 sessions,实时数量用 daemon/status。Web Shell live-state 默认每 5 秒刷新;QWEN_SESSION_LIVE_STATE_POLL_INTERVAL_MS 可设 1000–2147483647 的整数毫秒,非法回退 5000,修改后重启 daemon 并刷新页面。它不改变完整目录轮询。
环境和预检
env 仅显示白名单秘密变量是否存在,不返回值;proxy 去除凭据并缩为 host:port。preflight 的 Node、CLI、目录、rg、git、npm 检查直接来自 daemon,认证、MCP、Skill、provider、工具、egress 需 live child。
预检错误类别包括 missing_binary、auth_env_error、init_timeout、restore_timeout、protocol_error、missing_file、parse_error、blocked_egress。没有 child 时应显示未开始,不应误报全部配置缺失。LSP 状态在没有 --experimental-lsp 时返回 enabled: false 和空 server 列表。
稳定日志与轮转
默认日志为 ${QWEN_RUNTIME_DIR or ~/.qwen}/debug/daemon/daemon.log,每条记录有本次启动随机 runId 和 PID。macOS/Linux 可持续跟随轮转:
tail -F ~/.qwen/debug/daemon/daemon.log日志追加生命周期、路由错误、ACP stderr;QWEN_SERVE_DEBUG=1 增加 bridge 诊断。stderr 仍保留,文件不是替代输出。
单文件到约 10 MiB 前轮转,每个 family 留 4 个 archive;单记录最多 256 KiB,待写队列最多 4 MiB。压力、轮转或文件系统失败可能丢失文件副本,full status 提供健康状态及丢弃记录/字节数。
同一日志 namespace 只能有一个稳定 owner,并发 daemon 使用 debug/daemon/runs/run-
排障记录的含义
Standalone session creation failed 记录 sessionId、phase、safe reason、dispatchState、cleanupOutcome;子会话另记录 parent 为 relatedSessionId。write_not_confirmed 不指出具体文件系统原因,unknown 不证明清理成功,quarantine 也不等于回滚。
需要独立历史时使用不同 QWEN_RUNTIME_DIR。新目录 0700、文件 0600;QWEN_DAEMON_LOG_FILE=0(亦接受 false/off/no)关闭文件日志而不影响 stderr。不要对活动 daemon.log 做外部 logrotate、删除或截断;可复制、收集但不要修改日志 family。会话 debug 日志与旧 serve-
指标与分布式追踪
OTel 与上述稳定日志分别配置。daemon HTTP、会话、队列、SSE 和 heap 指标见遥测参考;入站 traceparent 与访问日志 traceId 的关系见Trace 关联。