当前位置:首页 > VUE

vue实现错误上报系统

2026-02-21 07:35:15VUE

Vue 错误上报系统实现方案

错误捕获方式

全局错误捕获通过 Vue.config.errorHandler 实现,可捕获组件渲染、事件处理器等上下文中的未捕获错误。示例代码:

Vue.config.errorHandler = function (err, vm, info) {
  console.error(`Error: ${err.toString()}\nInfo: ${info}`);
  // 调用上报接口
  reportErrorToServer({
    error: err.stack,
    component: vm?._name,
    info,
    route: vm?.$route?.path
  });
};

异步错误处理

使用 window.onerror 捕获全局 JavaScript 异常,包括异步错误:

window.onerror = function(message, source, lineno, colno, error) {
  reportErrorToServer({
    type: 'UNHANDLED_ERROR',
    message,
    source,
    line: lineno,
    column: colno,
    stack: error?.stack
  });
};

Promise 异常处理

通过 unhandledrejection 事件捕获未处理的 Promise 异常:

window.addEventListener('unhandledrejection', event => {
  reportErrorToServer({
    type: 'PROMISE_REJECTION',
    reason: event.reason?.stack || event.reason
  });
});

性能监控集成

错误上报可结合性能监控数据:

vue实现错误上报系统

const getPerformanceData = () => {
  const [navigation] = performance.getEntriesByType('navigation');
  return {
    loadTime: navigation.loadEventEnd - navigation.startTime,
    dns: navigation.domainLookupEnd - navigation.domainLookupStart,
    tcp: navigation.connectEnd - navigation.connectStart
  };
};

上报策略优化

采用节流和聚合上报策略防止高频错误导致网络拥堵:

let errorQueue = [];
const debouncedReport = _.debounce(() => {
  sendBatchErrors(errorQueue);
  errorQueue = [];
}, 5000);

function queueError(error) {
  errorQueue.push(error);
  debouncedReport();
}

用户行为记录

记录用户操作路径辅助问题定位:

let userActions = [];
const recordAction = (action) => {
  userActions.push({
    action,
    timestamp: Date.now(),
    route: router.currentRoute.path
  });
  if (userActions.length > 20) userActions.shift();
};

生产环境配置

通过环境变量区分上报环境:

vue实现错误上报系统

const config = {
  prod: {
    api: 'https://report.example.com/api',
    sampleRate: 1.0
  },
  dev: {
    api: '/dev-api',
    sampleRate: 0.1
  }
};

数据加密处理

敏感信息需进行脱敏处理:

function sanitizeData(data) {
  const clone = {...data};
  if (clone.user) {
    clone.user = '[REDACTED]';
  }
  return clone;
}

可视化展示方案

建议使用开源工具搭建看板:

  • 使用 Kibana 展示错误趋势
  • 通过 Grafana 监控性能指标
  • 利用 Sentry 进行错误分类

本地调试支持

开发环境下输出详细日志:

if (process.env.NODE_ENV === 'development') {
  Vue.config.performance = true;
  Vue.config.devtools = true;
}

标签: 错误系统
分享给朋友:

相关文章

vue实现审批系统

vue实现审批系统

Vue实现审批系统的关键步骤 搭建基础框架 使用Vue CLI或Vite初始化项目,安装vue-router管理路由,引入Element UI或Ant Design Vue作为UI组件库。审批系统通常…

vue系统首页实现

vue系统首页实现

Vue 系统首页实现方法 创建基础项目结构 使用 Vue CLI 或 Vite 初始化项目,安装必要依赖如 vue-router、axios、element-ui 等。项目目录应包含 componen…

vue实现考试系统

vue实现考试系统

Vue实现考试系统的基本架构 使用Vue.js构建考试系统需要结合前端框架和后端API。Vue负责用户界面和交互逻辑,后端处理数据存储和业务规则。 核心功能模块设计 用户认证模块 实现登录/注册功…

vue实现平台系统

vue实现平台系统

Vue 实现平台系统的方法 项目初始化与配置 使用 Vue CLI 或 Vite 初始化项目,推荐 Vue 3 + TypeScript 组合。安装核心依赖: npm create vue@late…

vue实现图书购买系统

vue实现图书购买系统

Vue实现图书购买系统 项目结构设计 使用Vue CLI或Vite初始化项目,推荐目录结构: src/components/ 存放可复用组件(如图书卡片、购物车) src/views/ 存放页面级组…

php实现叫号系统

php实现叫号系统

实现叫号系统的基本思路 叫号系统通常用于医院、银行、政务大厅等场所,核心功能包括取号、叫号、显示当前号码和排队情况。PHP作为后端语言,可结合MySQL数据库和前端技术实现。 数据库设计 创建基本表…