前端监控主要包括行为监控、异常监控、性能监控。这篇是异常监控。
一般做法:
在组件最外层(APP)包裹一个收集错误的高阶组件。将收集到的错误日志通过img标签上传到数据库中。错误日志在展现在数据中心,如果遇到页面crash的情况,会把该错误的报错信息和url发送提示。
一个监控系统,大致可以分成一个阶段:日志采集、日志存储、统计与分析、报告和警告。
监控错误方法
前端捕获异常分为全局捕获和单点捕获。全局捕获代码集中,易于管理;单点捕获作为补充,对某些特殊情况进行捕获,但分散,不利于管理。
所以可以将unhandledrejection事件抛出的异常再次抛出就可以统一通过error事件进行处理了。(react的事件异常可以通过comonentdidcatch来捕获)
前端缓存日志
可用的持久化方案主要有:cookie、localstorage、sessionstorage、indexdb、websql,下为对比图
综合过后,indexdb是最好的选择,它具有容量大、异步的优势,异步的特性保证它不会对界面的渲染造成阻塞。
indexDB的具体使用
当一个事件、变动、异常被捕获后形成一条初始日志,被存入暂存区(indexDb的一个store中),之后主程序就结束了收集过程,后续的事只在webworker中发生。在一个webworker中,一个循环任务不断从暂存区中取出日志,对日志进行分类,将分类结果储存到索引区中,并对日志记录的信息丰富,最终将上报到服务器的日志记录转存到归档区。当一条日志在归档区中存在的时间超过一定天数之后,就没有价值了,但为了防止特殊情况,被转存到回收区,再经历一段时间后,从回收区中清除。
完善: 使用source-map定位出错误代码在项目中的位置。 将一个异常的发生串联起来(采用堆栈的形式,将用户行为入栈,发生异常时,读取栈内信息。)