-
Notifications
You must be signed in to change notification settings - Fork 39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
如何引入阿里云ARMS前端监控? #102
Comments
/**
* 阿里前端监控
* 配置文档 https://www.npmjs.com/package/alife-logger
*/
import BrowerLogger from 'alife-logger';
const logger = (() => {
if (process.env.NODE_ENV === 'production') {
try {
return BrowerLogger.singleton({
pid: '241asf2342141@dfaf1', // 这是项目ID,新建一个应用站点后自动生成,在单个应用站点内部的`设置->应用设置`查看
imgUrl: 'https://arms-retcode.aliyuncs.com/r.png?', // 日志上传地址,源码中默认值就是这个地址
enableSPA: true, // 是否监听页面的 hashchange 事件并重新上报 PV,适用于单页面应用场景
sendResource: true, // 是否上报资源数据
});
} catch (e) {
// eslint-disable-next-line no-console
console.error('init logger fail', e);
}
} else {
return {
error() {},
};
}
})();
export default logger; |
enableSPA: true和hashchange事件是什么意思呢?开启单页应用的PV上报。 |
为什么要采用立即回调函数的方法?这样更加简洁,若不使用,会是以下形式,非常清晰且入门的写法。 /**
* 阿里前端监控
* 配置文档 https://www.npmjs.com/package/alife-logger
*/
import BrowerLogger from 'alife-logger';
const logger;
// eslint-disable-next-line no-constant-condition
if (process.env.NODE_ENV === 'production') {
try {
logger = BrowerLogger.singleton({
pid: 'hq48j@5503bd6abd48093',
imgUrl: 'https://arms-retcode.aliyuncs.com/r.png?',
enableSPA: true,
sendResource: true,
});
} catch (e) {
// eslint-disable-next-line no-console
console.error('init logger fail', e);
}
} else {
logger = error() {},
}
export default logger; |
如何注入到vue项目中呢?main.js import arms from '@/arms';
Vue.config.errorHandler = (err, vm, info) => {
arms.error(err, { filename: `${vm.$vnode.tag}, ${info}`});
}; Vue.config是什么?Vue.config是一个对象,包含vue的一些全局配置,可以在启动应用之前修改属性。 这次主要的任务是学习Vue.config.errorHandler,附带着把Vue.config.productionTip = false也了解下。 Vue.config.errorHandler在组件渲染函数或者watchers期间,分配一个处理器给uncaught error。 Vue.config.errorHandler = function (err, vm, info) {
// err 错误信息
// vm Vue实例
// info Vue-specific error信息
} 关键词:捕获错误 捕获uncaught error 前端错误追踪 避免前端页面崩溃
Vue.config.errorHandler源码: function globalHandleError (err, vm, info) {
if (config.errorHandler) {
try {
return config.errorHandler.call(null, err, vm, info) // 有定义就返回自定义的运行后的Vue的config.errorHandler。可以用于将错误上报给第三方前端错误追踪服务,例如阿里云ARMS,Sentry,Bugsnag等等
} catch (e) {
logError(e, null, 'config.errorHandler'); // 运行错误的话抛出异常
}
}
logError(err, vm, info); // 当errorHandler为undefined时,被捕获的错误会通过console.error输出避免崩溃,其实也就是默认会捕获uncaught error并且输出,避免崩溃。
} logError源码: function logError (err, vm, info) {
{
warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
}
/* istanbul ignore else */
if ((inBrowser || inWeex) && typeof console !== 'undefined') {
console.error(err);
} else {
throw err
}
} errorHandler内部函数为什么是
|
老大对我目前手上的项目引入了阿里云ARMS前端监控,但是我自己对ARMS SDK的API以及如何注入到Vue中不是很懂,因此这篇博客诞生了。
The text was updated successfully, but these errors were encountered: