前言

一直以来我们都是用Sentry做项目监控,不过前段时间我们的Sentry坏掉了(我搞坏的)

但监控又是很有必要的,在sentry修好之前,我想先寻找一个临时的替代方案,同时发现网上关于ExceptionLess的资料少得可怜,ExceptionLess官方的文档也不是很完善,翻了好久文档和源码,于是有了本文……

关于ExceptionLess

写.NetCore的同学应该不会陌生,这个是.Net平台的一款监控工具,跟Sentry差不多,不过我们觉得界面比sentry清爽,信息也比较清晰一目了然,所以我们的.NetCore服务监控全都用ExceptionLess来做。

然后ExceptionLess也是支持前端的,因此,我打算先暂时用ExceptionLess来做我们的前端项目监控。

准备工作

在ExceptionLess中创建一个项目,这个懂的都懂,不重复了~

ExceptionLess提供了好几种模式,有Node.js、也有浏览器应用,这里我选的是浏览器应用。

官方还有关于Vue的例子,不过是vue3.x版本的,因为我们目前还在用vue2.x,所以只能自己基于浏览器应用的SDK封装一个来用~

安装ExceptionLess客户端

使用yarn安装客户端

yarn add exceptionless

我使用的版本是^1.6.4

集成ExceptionLess

src/utils下创建一个新的js文件:exceptionless.js

import {ExceptionlessClient} from 'exceptionless/dist/exceptionless';

const exLessClient = ExceptionlessClient.default;
exLessClient.config.apiKey = '';
exLessClient.config.serverUrl = '' const install = Vue => {
if (install.installed)
return install.installed = true Object.defineProperties(Vue.prototype, {
$exLess: {
get() {
return exLessClient
}
}
})
} export default install

这样实现了把ExceptionLess封装为一个Vue模块

然后编辑main.js,准备注册模块

import Exceptionless from './utils/exceptionless'
// Exceptionless模块
Vue.use(Exceptionless)

这样,在需要提交日志的地方就可以直接使用:

this.$exLess.submitLog('测试信息')
this.$exLess.submitException(error)

集成到全局异常处理

如果所有异常要自己手动捕获提交的话就太麻烦了,而且会有漏网之鱼

我参考了网上的资料,搞了个vue全局异常处理,把没有手动捕获的异常收集起来,然后一并提交到ExceptionLess平台。

直接上代码,src/utils/errorHandler.js

import {ExceptionlessClient} from 'exceptionless/dist/exceptionless';

const exLessClient = ExceptionlessClient.default;

function isPromise(ret) {
return (ret && typeof ret.then === 'function' && typeof ret.catch === "function")
} const errorHandler = (error, vm, info) => {
console.error('抛出全局异常', 'vm=', vm, 'info=', info)
console.error(error)
exLessClient.submitException(error)
} function registerActionHandle(actions) {
Object.keys(actions).forEach(key => {
let fn = actions[key]
actions[key] = function (...args) {
let ret = fn.apply(this, args)
if (isPromise(ret)) {
return ret.catch(errorHandler)
} else { // 默认错误处理
return ret
}
}
})
} const registerVuex = (instance) => {
if (instance.$options['store']) {
let actions = instance.$options['store']['_actions'] || {}
if (actions) {
let tempActions = {}
Object.keys(actions).forEach(key => {
tempActions[key] = actions[key][0]
})
registerActionHandle(tempActions)
}
}
}
const registerVue = (instance) => {
if (instance.$options.methods) {
let actions = instance.$options.methods || {}
if (actions) {
registerActionHandle(actions)
}
}
} let GlobalError = {
install: (Vue, options) => {
/**
* 全局异常处理
* @param {*} error
* @param {*} vm
*/
Vue.config.errorHandler = errorHandler
Vue.mixin({
beforeCreate() {
registerVue(this)
registerVuex(this)
}
})
Vue.prototype.$throw = errorHandler
}
} export default GlobalError

main.js中注册

import ErrorHandler from "./utils/errorHandler"

// 全局异步处理模块
Vue.use(ErrorHandler)

搞定~

参考资料

Vue2.x项目整合ExceptionLess监控的更多相关文章

  1. PMP 第四章 项目整合管理

    1.什么是整合管理,整合什么?如何整合?    项目整合管理包括识别 定义 组合 统一与协调项目管理过组的个过程及项目管理活动二进行的各种过程和活动.    整合兼具统一 合并 连接和一体化的性质,对 ...

  2. 思维导图读PMbok第6版 - 项目整合管理(21张全讲)

    “ 3个月,800多页书,一大堆工作,复习时间不够呀?老师用思维导图解析PMP,思维导图解析PMP梳理PMbok第6版逻辑结构,帮你您全局掌握PMP知识,重点掌握PMbok难点.快速记忆PMP知识,思 ...

  3. 【PMP】项目整合管理

    项目整合的七个过程组: 制定项目章程 制定项目管理计划 指导语管理项目工作 管理项目知识 监控项目工作 实施整体变更控制 结束项目或阶段 1.制定项目章程 1.1 定义 制定项目章程是编写一份正式批准 ...

  4. PMBOK 指南 第四章 项目整合管理(4.1-4.3)

    项目整合管理 包括对隶属于项目管理过程组的各个过程和项目管理活动进行识别.定义.组合.统一和协调的各个过程. 资源分配.平衡竞争性需求.研究各种备选方法.为实现项目目标而裁剪过程.管理各个项目管理知识 ...

  5. WEB前端资源项目整合

    WEB前端资源项目整合 vue.js高仿饿了么(1-13章全)链接:https://pan.baidu.com/s/1qYSiYXluA1AlEV0EskxWZw提取码:25z9 Vue.js 2.5 ...

  6. PMP 冲!|项目整合管理

    0x00概述 项目管理包括识别.定义.组合.统一与协调各项目管理过程组的过程及项目管理活动.包括在各个项目冲突的目标与方案之间进行权衡和选择. 整合管理包括进行如下选择: 资源分配: 平衡竞争性需求: ...

  7. 项目管理--PMBOK 读书笔记(4)【项目整合管理】

    项目整合管理:包括对隶属于项目管理过程组的各种过程和项目管理活动进行识别.定义.组合.统一和协调的各个过程. 项目整合管理的核心概念: 1.确保产品.服务或成果的交付日期,项目生命周期以及效益管理计划 ...

  8. NLog整合Exceptionless

    前言 在实际的.Net Core相关项目开发中,很多人都会把NLog作为日志框架的首选,主要是源于它的强大和它的扩展性.同时很多时候我们需要集中式的采集日志,这时候仅仅使用NLog是不够的,NLog主 ...

  9. springboot项目整合druid数据库连接池

    Druid连接池是阿里巴巴开源的数据库连接池项目,后来贡献给Apache开源: Druid的作用是负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个: D ...

  10. 【PMP学习笔记】第4章 项目整合管理

    [PMP学习笔记]第4章 项目整合管理 一.项目整合管理 什么是项目整合管理? 项目整合管理由项目经理负责.虽然其他知识领域可以由相关专家(如成本分析专家.进度规划专家.风险管理专家)管理,但是项目整 ...

随机推荐

  1. 文心一言 VS 讯飞星火 VS chatgpt (137)-- 算法导论11.3 3题

    三.用go语言,考虑除法散列法的另一种版本,其中 h(k) = k mod m,m=$2^p-1$,k为按基数 $2^p$ 表示的字符串.试证明:如果串可由串 y 通过其自身的字符置换排列导出,则x和 ...

  2. 详解GaussDB(DWS)的query_band负载识别与应用

    摘要:query_band是一个会话级别(session)的GUC参数,本身是字符串类型,支持任意形式字符组合. 本文分享自华为云社区<GaussDB(DWS)的query_band负载识别与应 ...

  3. 云图说|ModelArts Pro,为企业级AI应用打造的专业开发套件

    摘要: ModelArts Pro 为企业级AI应用打造专业开发套件.基于华为云的先进算法和快速训练能力,提供预置工作流和模型,提升企业AI应用的开发效率,降低开发难度. AI技术的高门槛与落地难是中 ...

  4. 如何配置Apple推送证书 push证书

    ​ 转载:如何配置Apple推送证书 push证书 想要制作push证书,就需要使用快捷工具appuploader工具制 作证书,然后使用Apple的推送功能配置push证书,就可以得到了.PS:pu ...

  5. 让快更快,火山引擎 ByteHouse 为 ClickHouse 提速

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   近日,火山引擎数智平台VeDI与DataFun联合举办以"OLAP计算引擎"为主题的直播活 ...

  6. Axure 弹出框遮罩层灯箱效果

    灯箱效果:比较适合Web, 效果不太理想,还是自己做个比较合适 弹出效果:就是弹框 推动效果:A 元件显示的时候,把 B元件往下.右移动.如Web左侧菜二级单效果

  7. Axure 多人协作

    创建团队项目 团队 => 从当前文件创建团队项目 签出的文件才能被修改 签出 签入 发布评论 邀请 编辑的5种状态 和SVN差不多的概念 已有项目导入 https://www.bilibili. ...

  8. Apollo系列之架构设计(一)

    原创文章,转载请标注.https:https://www.cnblogs.com/boycelee/p/17967590 目录 一.什么是配置中心? 二.传统配置有什么问题? 三.配置中心的场景 四. ...

  9. 【django-vue】 项目上线 uuid重复问题 内网穿透 支付宝验签 nginx集群 远程连接redis 使用uwsgi启动django

    目录 上节回顾 uuid重复问题 内网穿透 支付宝验签 今日内容 1 上线架构图 2 阿里云购买 3 安装git和其他依赖 4 云服务器安装mysql 5 云服务器安装redis(源码安装) 远程连接 ...

  10. shell 里使用 sed awk

    1 在shell脚本里使用sed 需把''改为"" 2 在shell脚本里使用awk 正则里使用 变量加上单引 awk -F: '/^'$user_name'/{print $1, ...