微信小程序错误日志思考
作者:互联网
微信小程序运行过程中,基于需求大整改或者代码逻辑,接口联调存在争议等等原因,会出现写莫名其妙的报错,我们都要复现错误现象才能排查错误解决问题的话,那么效率有点低,而且特别被动。
如果是接口数据问题,可以通过用户操作日志,具体参考https://www.cnblogs.com/ljt-8961/p/15918646.html或者https://www.cnblogs.com/ljt-8961/p/15918758.html,可以把接口请求和返回数据全过程做上报操作。可以一步步排查具体到那个功能问题。然而说到底,这些都是被动后的处理方案,被触发错误后上报到我们这边,我们做的处理,没有在源头上处理问题。
如果是初版功能的开发,我建议打开微信的错误告警设置,设置下只要出现错误就马上上报,把自己添加到微信提醒的群聊里面,如图
那么我们能够及时发现自己的错误,建议针对后台返回的接口统一做try catch处理,注意try catch里面嵌套的逻辑不宜过多,可以查看这方面的性能问题。但是上述的是初版的,如果后续多次出现微信的推送,特别是休息时间是很烦的,基本初版后出现大问题的情况相对少了很多,这个情况下,我们可以提高微信推送的门槛,例如10分钟内5次出现此报错,就推送,其他的使用我们自己的错误上报。
了解vue的知道vue常见有三种上报错误方法,但是小程序不支持window对象,也就是说window.addEventListener('error')无效。再回到小程序,微信小程序有执行错误的周期onError,我们可以在这里获取到错误,然后使用微信的api上报错误或者后台给我们接口上报到企业微信或者我们的后台操作系统等等。如果你使用的不是原生小程序开发,例如uniapp,同时可以在main.js执行以下代码,当然上报的方案同上所述或者自己有其他的方案的
let errorLimit = false //系统错误捕获 const errorHandler = (err, vm, info) => { if(base.env !== "prod") { return } // 代码执行报错 if(errorLimit) { return } let _errObjReport = { occurrenceTime: publicFn.formatTime(Date.now()), occurrenceUser: store.getters.userId || "noUserId", operatingEnv: "miniApp", info: err.message, type: "main" }; errorLimit = true try{ _errObjReport.info = err.toString().split("\\n")[0]; } catch(err) { console.log("catcherr", err) } apiJsErrSendMsg({ chatid: "jsError", content: _errObjReport }).then(res => { global._logger.writeLogs("上报错误成功"); setTimeout(() => { errorLimit = false }, 500) }).catch( err => { global._logger.writeLogs("上报错误失败", err); setTimeout(() => { errorLimit = false }, 500) }) } Vue.config.errorHandler = errorHandler; Vue.prototype.$throw = (error) => errorHandler(error, this);
我们开发的基础任务是保障项目能正常运转,但是基于技术追求和个人职业素质修养,我们会一步步优化自己的代码,了解自己的代码会出现什么问题,加以完善。基础上我们处理好错误上报和用户操作上报就可以跟踪用户操作步骤,弄清楚用户的信息状态是否正常。不断踩坑,发现问题,你就会进步。
标签:错误,err,微信,思考,catch,上报,日志,errorLimit 来源: https://www.cnblogs.com/ljt-8961/p/15922918.html