答案:构建JavaScript异常监控系统需捕获全局错误与Promise拒绝,收集堆栈及用户上下文信息,通过异步上报或sendBeacon发送至服务端,结合Sentry等工具实现错误追踪与分析。

前端异常监控是保障 Web 应用稳定运行的重要环节,尤其在复杂业务场景中,JavaScript 错误可能导致页面崩溃或功能失效。一个有效的错误追踪系统可以帮助开发团队快速定位问题、分析原因并及时修复。以下是构建 JavaScript 异常监控与错误追踪系统的关键要点。
捕获全局异常
通过监听全局事件,可以捕获未被处理的 JavaScript 错误和资源加载失败。
window.onerror 用于捕获同步脚本错误和语法错误:
window.onerror = function(message, source, lineno, colno, error) {console.error('Global Error:', { message, source, lineno, colno, error });
// 上报到服务器
reportError({ message, source, lineno, colno, stack: error?.stack });
return true; // 阻止默认错误弹窗
};
window.addEventListener('unhandledrejection') 捕获未处理的 Promise 错误:
立即学习“Java免费学习笔记(深入)”;
window.addEventListener('unhandledrejection', event => {const reason = event.reason;
reportError({
message: reason?.message || 'Promise rejected',
stack: reason?.stack,
type: 'unhandledrejection'
});
});
收集堆栈信息与上下文
原始错误信息往往不足以定位问题,需要补充上下文数据。
可采集的信息包括:
利用 error.stack 获取调用栈,结合 sourcemap 可还原压缩代码中的原始位置。
错误上报与服务端接收
错误应通过独立接口异步上报,避免阻塞主流程。
使用 fetch 或 Image 方式发送数据:
function reportError(data) {// 添加时间戳和唯一标识
data.timestamp = Date.now();
data.uuid = generateUUID();
// 使用 navigator.sendBeacon 在页面卸载时可靠发送
if (navigator.sendBeacon) {
navigator.sendBeacon('/log-error', JSON.stringify(data));
} else {
fetch('/log-error', {
method: 'POST',
body: JSON.stringify(data),
headers: { 'Content-Type': 'application/json' }
});
}
}
服务端需提供接收接口,存储错误日志并支持查询、去重和告警。
集成开源方案或第三方工具
从零搭建成本较高,可选用成熟方案提升效率。
- Sentry:功能强大,支持 sourcemap 解析、用户行为追踪、性能监控
- LogRocket:记录用户会话,可回放操作过程
- Bugsnag:专注错误报告与发布版本关联
- 自研 + ELK:将错误写入日志系统,用 Kibana 分析
这些工具通常提供 SDK,只需简单引入即可启用监控。
基本上就这些。关键是确保异常不被遗漏,上报稳定,并能结合上下文快速还原现场。不复杂但容易忽略细节。










