监控JS执行错误
因为要监控JS错误,所以,我们首先要创建一个js执行错误
1 | <!-- index.html文件 --> |
1、在src目录下创建monitor文件夹,在monitor文件夹下新建index.js文件和lib文件夹和utils文件夹,在lib文件夹下新建jsError.js文件
2、src下的index文件如下
1
import './monitor';//引入的是monitor文件夹下的index.js文件
3、monitor文件夹下的index.js文件内容如下
1
2import { injectJsError } from './lib/jsError';
injectJsError();
该文件引入了lib下的jsError,在jsError.js中我们来进行监控相关的事情
- 4、我们还需要创建几个工具函数,用于辅助我们获取错误事件
第一个:获取最后一个交互事件(在utils下创建getLastEvent.js)
1 | //getLastEvent.js文件->用于获取最后一个交互事件 |
第二个:当我们获取到错误的对象是,我们需要把该DOM节点的位置拼接起来并返回(在utils下创建getSelector.js文件)
1 | function getSelectors(path) { |
第三个:tracker(用于发送错误日志至阿里云日志中),在utils中创建tracker.js文件
1 | //tracker.js |
- 5、jsError.js文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19import getLastEvent from '../utils/getLastEvent';
import getSelector from '../utils/getSelector';
import tracker from '../utils/tracker';
//导出injectJsError
export function injectJsError() {
//监听全局未捕获的错误
window.addEventListener('error', function(event) {//错误事件对象
let lastEvent = getLastEvent();//获得最后一个交互事件
tracker.send({
kind: 'stability',//监控指标的大类
type: 'error',//小类型,这是一个错误
errorType: 'jsError',//JS执行错误
message: event.message,//报错信息
filename: event.filename,//哪个文件报错了
position: `${event.lineno}行:${event.colno}列`,
selector: laseEvent ? getSelector(lastEvent.path) : '',//代表最后一个操作的元素
});
}, true);
}