异常监控-异常上报

2020-07-28 11:15:282021-02-20 17:14:37

上报数据结构设计

公共信息

interface BaseinfoI {
  title: string;        // 页面名称
  location: string;     // 页面url
  message: string;      // 报错信息
  kind: string;         // 报错大类
  type: string;         // 报错小类
  errorType: string;    // 报错类型
  userAgent: string;    // 浏览器信息
}

JS错误

interface JSRunTimeErrorEventI extends BaseinfoI {
  filename: string;     // 报错js文件名
  position: string;     // 报错位置(行号:列号)
  stack: string;        // 堆栈信息
  selector: string;     // 触发错误的DOM
}

静态资源加载错误

interface AssetsErrorI extends BaseinfoI {
  url: string;          // 报错资源url
  nodeName: string;     // 资源类型
}

Promise错误

Ajax错误

interface AjaxErrorEventI extends BaseinfoI {
  response: string;     // 后端响应
  status: number;       // 请求状态码
  method: string;       // 请求方法
  url: string;          // 请求地址
  params: string;       // 请求参数
}

上报方式

img

new Img(`http://xxx/report?info=${xxx}`)

navigator.sendBeacon

MDN:navigator.sendBeacon()方法可用于通过HTTP将少量数据异步传输到Web服务器。使用sendBeacon()方法会使用户代理在有机会时异步地向服务器发送数据,同时不会延迟页面的卸载或影响下一导航的载入性能。这就解决了提交分析数据时的所有的问题:数据可靠,传输异步并且不会影响下一页面的加载。此外,代码实际上还要比其他技术简单许多!

navigator.sendBeacon("/log", analyticsData)

请求接口

后端处理

// todo