前端如何监控和处理错误?
探讨了使用 try-catch、全局错误处理、资源加载监听、Promise 异步错误捕获以及框架特定方法来监控和处理 JavaScript 错误。还介绍了 Sentry 等常用工具的集成与应用。
常见方法包括以下几种:
- Try-Catch Block(同步错误捕获):用于包裹特定代码块以捕获同步执行中的错误,但不适用于异步错误或资源加载错误。示例代码:
try { // 可能抛错的代码 } catch (error) { // 上报错误至服务器 fetch('/error-log', { method: 'POST', body: JSON.stringify(error) }); }
- 全局窗口错误处理(Window.onError):覆盖
window.onerror
函数可捕获 JavaScript 执行错误,包括跨域脚本错误(需配置crossorigin
属性)。示例:window.onerror = function(message, source, lineno, colno, error) { // 消息、来源文件、行列号记录 console.error(`Error at ${source}:${lineno}`); };
- 资源加载错误监听:使用
addEventListener('error', callback, true)
在捕获阶段监听资源失败事件(如 JS、CSS、Img 加载失败)。示例:window.addEventListener('error', function(event) { if (event.target !== window) { // 上报资源类型(如 img)、URL 和错误信息 console.log(`Resource error: ${event.target.tagName}`); } }, true);
- 异步错误处理:Promise 异常捕获:监听
unhandledrejection
事件处理未处理的 Promise 拒绝错误。示例:window.addEventListener('unhandledrejection', function(event) { console.error('Unhandled rejection:', event.reason); });
- 框架特定方法:适用于 Vue、React 等框架。
- React:利用
componentDidCatch
生命周期钩子捕获组件错误边界内异常。 - Vue:使用
Vue.config.errorHandler
全局错误处理器。
- React:利用
常见工具包括:
- Sentry:开源错误监控平台,通过集成 SDK 自动收集 JS 错误信息,并提供丰富上下文(类型、消息、堆栈),需安装 SDK 并初始化。
- 其他工具:如 Bugsnag、Rollbar 等,提供类似自动化错误报告与日志管理。
实践中推荐组合使用上述方法:全局监听基础错误,Try-Catch 覆盖关键逻辑,Sentry 等工具实现团队协作与问题分析。