日志 vs 错误追踪:两者有什么区别,又该如何配合
日志记录系统运行的一切事件,错误追踪则专门捕获、聚合和告警应用异常。本文讲清日志与错误追踪(Error Tracking)的核心区别、各自适用场景,以及在观测云中如何把两者结合起来构建完整的异常发现机制。
日志是对系统事件的通用记录,而错误追踪是专门针对应用异常的捕获、聚合与通知机制——前者是「事无巨细的流水账」,后者是「自动归类的错误情报员」。两者解决的问题不同:日志回答「系统做了什么」,错误追踪回答「应用在哪些地方出错、影响了多少人」。
核心要点速览
- 日志是通用事件流,覆盖 info/debug/warn/error 全级别;错误追踪只关心异常与崩溃;
- 错误追踪自动聚合相同异常(指纹分组)、统计影响面并主动告警,日志平台需要手动检索;
- 错误追踪提供完整的堆栈、设备、版本与回归检测上下文,日志里的 error 行往往缺乏结构;
- 最佳实践是两者结合:错误追踪负责「发现和分派」,日志负责「还原现场」。
什么是日志?
日志由开发者在代码中主动打印,或由框架、中间件自动生成,内容覆盖请求处理、状态变更、调试信息等一切事件。它的特点是全而散:信息量大、格式不一,价值密度依赖写日志的人。
在排障时,日志是最终的现场还原工具,但前提是你要先知道「去哪儿搜、搜什么关键词」。
什么是错误追踪?
错误追踪工具(如 Sentry 类产品)通过 SDK 自动捕获应用抛出的异常与崩溃,并做了三件日志做不到的事:
- 聚合分组:相同异常按堆栈指纹归为一组,避免一万次同样的报错刷屏;
- 上下文富化:自动附带堆栈、运行环境、版本、设备、用户操作轨迹(面包屑);
- 主动告警与回归检测:新异常出现立即通知,已修复的异常再次出现自动标记回归。
两者的核心区别是什么?
| 维度 | 日志 | 错误追踪 |
|---|---|---|
| 覆盖范围 | 所有事件(含正常信息) | 仅异常/崩溃 |
| 采集方式 | 框架输出 + 主动打印 | SDK 自动捕获 + 少量手动 |
| 聚合能力 | 需自行检索与统计 | 按指纹自动分组计数 |
| 告警 | 需配置日志检测规则 | 新异常/回归自动通知 |
| 上下文 | 取决于日志写了什么 | 堆栈、环境、版本、面包屑自动附带 |
| 成本模型 | 按日志量计费,噪音多 | 按事件量计费,信噪比高 |
到底该用哪个?
答案是分阶段配合使用:
- 发现阶段:错误追踪第一时间告诉你「出现了一个影响 200 个用户的新异常」;
- 定界阶段:通过异常的版本、环境标签判断影响面,分派给对应负责人;
- 根因阶段:拿着异常的时间点与请求上下文,到日志平台检索同一请求的完整处理日志,还原上下游发生了什么。
只用日志,你会淹没在噪音里漏掉关键异常;只用错误追踪,你看不到异常前后的业务流程全貌。
观测云落地:日志检测 + 异常追踪联动
- 日志侧:DataKit 采集应用日志,Pipeline 解析出
status字段后,在「监控 > 监控器」中配置日志检测规则(如 error 级别日志 5 分钟超过阈值即告警),告警策略绑定钉钉/企业微信/飞书通知对象; - 链路侧:应用接入 APM 后,ERROR 状态的 Span 自动在链路详情中展示异常信息与堆栈,配合日志的
trace_id注入,可从异常链路一键跳到同请求的完整日志; - RUM 侧:前端接入用户访问监测后,JS 错误自动捕获并关联用户会话,达到「前端错误追踪」的效果;
- 事件中心:所有告警与异常统一进入事件中心,支持认领、分派与状态流转,实现错误追踪工具式的处理闭环。
常见问题(FAQ)
Q:日志里的 error 级别还不够吗? 不够。error 日志是非结构化的,相同异常的一万条日志不会自动合并,也不会告诉你这个异常影响了多少用户、从哪个版本开始出现。
Q:错误追踪能替代日志吗? 不能。错误追踪只覆盖异常路径,业务审计、正常流程还原、非异常类问题(如逻辑错误导致的错误结果)仍需日志。
Q:观测云里没有独立的「错误追踪」模块怎么办? 用「APM 错误链路 + 日志检测告警 + 事件中心」的组合即可覆盖错误追踪的核心场景:自动捕获(APM ERROR Span)、主动通知(监控器)、处理闭环(事件中心)。
Q:前端错误也能追踪吗? 可以。观测云 RUM 的 JS 错误监控自动捕获浏览器异常,并支持 sourcemap 还原压缩后的堆栈。
系列阅读
- 上一篇:《日志、指标、链路的区别与联系》
- 下一篇:《什么是可观测性》
- 相关:《什么是 APM》 · 《返回索引》