Logging & Observability 专题¶
重要性:⭐⭐(可观测性细节——log + event + profiler + sink + metrics) 真实位置:
src/utils/log.js+src/services/analytics/+src/utils/startupProfiler.js+src/utils/sinks.ts角色:4 通道可观测性 关联:topics/cache-strategies.md、analysis/logging-telemetry.md
1. 4 通道可观测性¶
┌────────────────────────────────────────┐
│ 1. logError (错误日志) │
│ 2. logEvent (业务事件) │
│ 3. profileCheckpoint (启动性能) │
│ 4. analytics sink (聚合遥测) │
└────────────────────────────────────────┘
4 通道 —— 用途不同。
2. logError¶
2.1 API¶
单一函数 —— 内部处理。
2.2 用途¶
- 异常捕获后
- 业务失败
- 安全事件
2.3 输出位置(推测)¶
- 控制台(debug 模式)
- 文件(
~/.claude/logs/) - Statsig(采样)
3. logEvent¶
3.1 API¶
import { logEvent } from 'src/services/analytics/index.js'
logEvent('tengu_managed_settings_loaded', {
keyCount: 5,
keys: '...' as unknown as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
})
3 参数:name + metadata + 类型契约。
3.2 命名¶
tengu_*前缀_I_VERIFIED_*后缀
3.3 50+ events¶
tengu_managed_settings_loaded, tengu_code_prompt_ignored, tengu_single_word_prompt, tengu_teleport_interactive_mode, ...
4. profileCheckpoint¶
4.1 API¶
import { profileCheckpoint, profileReport } from './utils/startupProfiler.js'
profileCheckpoint('main_tsx_entry')
profileReport()
30+ 埋点 全文。
4.2 Statsig 上报¶
远程监控。
5. Analytics Sink¶
5.1 services/analytics/¶
analytics/
├── config.js isAnalyticsDisabled
├── growthbook.js feature flags
├── index.js logEvent 入口
├── sink.js sinks attach
└── ...
完整服务。
5.2 initSinks (preAction)¶
sink attach —— subcommand 也走。
PR #11106 修复 —— 防止 subcommand 丢事件。
5.3 GrowthBook¶
feature flag + A/B test。
6. 4 类 Event 类别¶
| 类别 | 例子 |
|---|---|
| 启动 / 性能 | tengu_managed_settings_loaded, tengu_exit_after_first_render |
| 用户行为 | tengu_code_prompt_ignored, tengu_single_word_prompt |
| 会话 | tengu_teleport_interactive_mode, tengu_teleport_resume_session |
| 安全 / 警告 | tengu_deprecated_setting, tengu_auth_failed |
4 类 —— 完整业务覆盖。
7. Sinks 抽象¶
7.1 utils/sinks.ts¶
// 推测
interface Sink {
send(event: AnalyticsEvent): Promise<void>
}
class StdoutSink implements Sink { ... }
class StatsigSink implements Sink { ... }
class FileSink implements Sink { ... }
多 sink —— fan-out。
7.2 attach¶
多 sink 并行。
8. 输出格式¶
8.1 控制台¶
dev 调试。
8.2 JSON¶
结构化。
8.3 文件¶
每日一个文件。
9. 采样¶
| 类型 | 采样 |
|---|---|
| 错误 logError | 100%(推测) |
| 业务 logEvent | 采样 |
| profileCheckpoint | 采样 |
不同采样率。
10. 隐私¶
10.1 命名约定¶
_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS —— 类型级强制。
10.2 脱敏¶
显式脱敏。
10.3 用户控制¶
关闭遥测。
11. OpenTelemetry¶
11.1 自定义 headers¶
OTEL headers。
11.2 29min debounce¶
防止频繁调。
12. 4 通道 vs 4 用途¶
| 通道 | 触发 | 频率 | 采样 | 目的地 |
|---|---|---|---|---|
| logError | 异常 | 罕见 | 100% | Sentry / file |
| logEvent | 业务 | 频繁 | 采样 | Statsig / 业务 |
| profileCheckpoint | 启动 | 启动时 | 采样 | Statsig |
| analytics sink | 业务 | 频繁 | 采样 | 聚合 |
4 通道 不同。
13. 关键设计模式¶
13.1 4 通道不混用¶
各司其职。
13.2 命名约定¶
类型级安全。
13.3 Sinks 抽象¶
fan-out。
13.4 subcommand sink 修复¶
PR #11106。
13.5 GrowthBook 集成¶
feature flag + A/B。
13.6 50+ events¶
tengu_* 前缀。
13.7 用户可控¶
isAnalyticsDisabled。
13.8 启动 profiler 独立¶
与业务事件分离。
14. 关键洞察¶
14.1 4 通道不混用¶
logError / logEvent / profileCheckpoint / sink。
14.2 命名约定强制¶
类型级安全。
14.3 subcommand 修复¶
PR #11106。
14.4 GrowthBook 集成¶
feature flag + A/B。
14.5 50+ events¶
业务覆盖广。
14.6 用户可控¶
隐私友好。
14.7 Sinks fan-out¶
多目的地。
14.8 启动 profiler 独立¶
与业务事件分离。
14.9 100% vs 采样¶
错误 100%,业务采样。
14.10 OTEL 集成¶
自定义 headers。
15. 改进方向¶
15.1 完整 OTel 集成¶
分布式追踪。
15.2 错误聚合¶
错误聚合服务。
15.3 业务 dashboard¶
业务指标可视化。
15.4 用户级别遥测¶
用户行为分析。
16. 阅读建议¶
- 看
services/analytics/index.js—— logEvent 入口 - 看
utils/log.js—— logError - 看
utils/sinks.ts—— sink 抽象 - 看
utils/startupProfiler.js—— profileCheckpoint - grep
logEvent全文 —— 50+ 事件分布
17. 与其他专题的关系¶
| 文件 | 关系 |
|---|---|
cache-strategies.md |
sink 缓存 |
deep-dive-insights.md |
业务报告 |
analysis/logging-telemetry.md |
整体 |