如何将ExceptionLess监控集成到Vue2.x项目中?

2026-05-17 01:241阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计952个文字,预计阅读时间需要4分钟。

如何将ExceptionLess监控集成到Vue2.x项目中?

前言:一直以来,我们都是用Sentry进行项目监控。不过,近期我们的Sentry出现了故障(是我搞坏的)。虽然监控非常重要,但在Sentry修复前,我想先找一个临时的替代方案,同时在网上寻找相关解决方案。

前言

一直以来我们都是用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,准备注册模块

如何将ExceptionLess监控集成到Vue2.x项目中?

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)

搞定~

参考资料
  • 优雅的处理vue项目异常:juejin.cn/post/6844903860121632782
  • Vue3 对比 Vue2.x 差异性、注意点、整体梳理,与React hook比又如何:juejin.cn/post/6892295955844956167#heading-21
微信公众号:「程序设计实验室」 专注于互联网热门新技术探索与团队敏捷开发实践,包括架构设计、机器学习与数据分析算法、移动端开发、Linux、Web前后端开发等,欢迎一起探讨技术,分享学习实践经验。

本文共计952个文字,预计阅读时间需要4分钟。

如何将ExceptionLess监控集成到Vue2.x项目中?

前言:一直以来,我们都是用Sentry进行项目监控。不过,近期我们的Sentry出现了故障(是我搞坏的)。虽然监控非常重要,但在Sentry修复前,我想先找一个临时的替代方案,同时在网上寻找相关解决方案。

前言

一直以来我们都是用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,准备注册模块

如何将ExceptionLess监控集成到Vue2.x项目中?

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)

搞定~

参考资料
  • 优雅的处理vue项目异常:juejin.cn/post/6844903860121632782
  • Vue3 对比 Vue2.x 差异性、注意点、整体梳理,与React hook比又如何:juejin.cn/post/6892295955844956167#heading-21
微信公众号:「程序设计实验室」 专注于互联网热门新技术探索与团队敏捷开发实践,包括架构设计、机器学习与数据分析算法、移动端开发、Linux、Web前后端开发等,欢迎一起探讨技术,分享学习实践经验。