docs/technical/sentry-error-reporting.md
Last updated: 2026-07
本文定义 Chatbox Pro 的错误上报边界、分类字段、采样与隐私规则。Sentry 只用于调查产品故障;用户行为与转化漏斗继续使用 JK/Plausible。
| 进程 | 错误入口 | 处理方式 |
|---|---|---|
| Renderer | SDK 默认全局错误与未处理 Promise | 作为 critical 保留,不再重复注册 window 监听 |
| Renderer | React ErrorBoundary | ui 领域,按 boundary 名称分类,100% 保留 |
| Renderer | 启动、迁移、会话生成、Agent Mode | 使用 reportError() 添加稳定上下文 |
| Renderer | 摘要、命名、token 估算、后台 license 校验 | 仅上报非预期异常,普通错误采样 |
| Main | 未捕获异常、应用启动失败 | application 领域,100% 保留 |
| Main | Renderer 进程异常退出 | renderer-process 领域,记录 reason 与 exit code |
| Main | Knowledge Base / Session Attachment RAG | 沿用 component/operation 上下文,并统一映射为稳定分类 |
以下情况不应进入 Sentry:
AbortError;ResizeObserver 和跨域 Script error 等浏览器噪音;console.error。本地日志负责保留 console 信息,Sentry 不再劫持 console 或附加 console breadcrumbs。| 标签 | 示例 | 含义 |
|---|---|---|
error_source | renderer / main | 事件来自哪个进程 |
error_domain | ui, storage, ai-generation, knowledge-base | 失败所属产品/技术领域 |
error_operation | migration, submit_message, database_initialization | 失败时正在执行的稳定操作名 |
error_priority | critical, high, normal | 决定保留与采样策略 |
error_handled | true / false | 应用是否捕获并继续运行 |
error_sample_rate | 1, 0.1, 0.2 | 当前事件使用的采样率,便于解释数量 |
原有的 component、operation、platform、app_version、build_target、build_platform 继续保留,兼容历史查询。
| 优先级 | 典型事件 | Renderer | Main |
|---|---|---|---|
critical | 未处理错误、ErrorBoundary、进程退出、应用启动失败 | 100% | 100% |
high | 数据迁移、数据库/向量库初始化、核心生成、Agent Mode | 100% | 100% |
normal | 已处理且有 fallback 的非预期异常 | 10% | 20% |
采样只影响发送,不改变本地日志。主进程还会按异常对象去重,因此同一错误在底层和上层被重复捕获时不会重复计数。
Renderer 新增显式上报时使用 src/renderer/utils/sentry.ts:
reportError(error, {
domain: 'session',
operation: 'submit_message',
priority: 'high',
})
调用前先判断错误是否为预期业务结果。只有调查故障所需的低基数字段才放 tag;数量、耗时、状态码等放 extra。不要附加原始消息、prompt、请求体、响应体、文件名、文件路径、查询文本、认证信息或用户标识。
生成链路统一使用 src/shared/models/error-classification.ts 判断预期错误,覆盖 Chatbox AI 额度/License/能力错误、Provider API 错误、网络错误和已有 fallback 的 OCR/图片能力错误。不要在各入口维护不同的错误白名单。
Main/Shared 通过 SentryAdapter.withScope() 设置相同标签。Knowledge Base 与 RAG 的既有 component / operation 会由统一策略自动映射。
发送前统一执行以下处理:
event.user 和 request body;configVersion 和目标版本;tokenCount、maxTokens、contentLength、queryDuration、promptVersion 等诊断信息;sk- key、macOS/Linux/Windows 用户主目录进行脱敏;Main 的 fatal handler 在未捕获异常时等待 Sentry flush(最多 2 秒)后以失败状态退出,避免关键崩溃事件只进入异步队列便被进程终止。
error_priority:criticalerror_source:main 或 error_source:renderererror_domain:knowledge-baseerror_operation:database_initializationrelease:<version>、environment:production观察事件量时需结合 error_sample_rate,普通错误的原始发生次数不能直接用发送数代替。