搭建前端监控,如何采集异常数据?( 四 )


const handleError = (error: any) => {if (error instanceof Error) {let { name, message } = error;console.log(name, message);// 打印结果:TypeError console.aaa is not a function}};
获取环境数据
获取环境数据的意思是,不管是接口异常还是前端异常,除了异常本身的数据之外,我们还需要一些其他信息来帮助我们更快更准的定位到哪里出错了 。
这类数据我们称之为 “环境数据”,就是触发异常时所在的环境 。比如是谁在哪个页面的哪个地方触发的错误,有了这些,我们就能马上找到错误来源,再根据异常信息解决错误 。
环境数据至少包括下面这些:
app 和都是应用配置,可以判断异常出现在哪个应用的哪个版本 。这两个字段我建议直接获取 .json 下的 name 和属性,在应用升级的时候,及时修改版本号即可 。
其余的字段,需要根据框架的配置获取,下面我分别介绍在 Vue 和 React 中如何获取 。

搭建前端监控,如何采集异常数据?

文章插图
在 Vue 中
在 Vue 中获取用户信息一般都是直接从 Vuex 里面拿,如果你的用户信息没有存到 Vuex 里,从里获取也是一样的 。
如果在 Vuex 里,可以这样实现:
import store from '@/store'; // vuex 导出目录let user_info = store.state;let user_id = user_info.id;let user_name = user_info.name;
用户信息存在状态管理中,页面路由信息一般是在 vue- 中定义 。前端的路由地址可以直接从 vue- 中获取,页面名称可以配置在 meta 中,如:
{path: '/test',name: 'test',meta: {title: '测试页面'},component: () => import('@/views/test/Index.vue')},
这样配置之后,获取当前页面路由和页面名称就简单了:
window.vm = new Vue({...})let route = vm.$routelet page_route = route.pathlet page_title = route.meta.title
最后一步,我们再获取当前环境 。当前环境用一个环境变量表示,有三个值:
然后在根目录下新建三个环境文件,写入环境变量:
现在获取 env 环境时就可以这么获取:
{env: process.env.VUE_APP_ENV;}
最后一步,执行打包时,传入模式以匹配对应的环境文件:
# 测试环境打包$ num run build --mode staging# 生产环境打包$ num run build --mode production
获取到环境数据,再拼上异常数据,我们就准备好了数据等待上报了 。
在 React 中
和 Vue 一样,用户信息可以直接从状态管理里拿 。因为 React 中没有全局获取当前旅游的快捷方式,所以页面信息我也会放在状态管理里面 。我用的状态管理是 Mobx,获取方式如下:
import { TestStore } from '@/stores'; // mobx 导出目录let { user_info, cur_path, cur_page_title } = TestStore;// 用户信息:user_info// 页面信息:cur_path,cur_page_title
这样的话,就需要在每次切换页面时,更新 mobx 里的路由信息,怎么做呢?
其实在根路由页(一般是首页)的中监听即可:
import { useLocation } from 'react-router';import { observer, useLocalObservable } from 'mobx-react';import { TestStore } from '@/stores';export default observer(() => {const { pathname, search } = useLocation();const test_inst = useLocalObservable(() => TestStore);useEffect(() => {test_inst.setCurPath(pathname, search);}, [pathname]);});