美文网首页
前端错误收集脚本

前端错误收集脚本

作者: 黄先森11212 | 来源:发表于2018-10-23 16:53 被阅读0次

前端错误分为 JS 运行时错误、接口错误、资源加载错误三种。
对于前端的异常捕获,我们都会知道 onerror 事件(当然还有 try,catch),但针对 window 的 error 事件的用法,其实是有区别的

window.onerror = handleOnError

  1. 能捕获到 js 执行错误,不能捕获带有 src 的标签元素的加载错误。

  2. 参数对应 5 个值(错误信息,所在文件,行,列,错误信息)

  3. 函数体内用 return true 可以不让异常信息输出到控制台

window.addEventListener

  1. 为捕获状态时(第三个参数为 true)能捕获到 js 执行错误,也能捕获带有 src 的标签元素的加载错误。

  2. 为冒泡状态时(第三个参数为 false)能捕获到 js 执行错误,不能捕获带有 src 的标签元素的加载错误。

  3. 参数对应 1 个值,异常事件,错误信息都在里面

  4. 函数体内用 e.preventDefault() 可以不让异常信息输出到控制台

注:如果 script 的 src 是非同源的跨域引用则需在标签上加 crossorigin 参数,并且配置一下服务器设置静态资源 Javascript 的 Response 为Access-Control-Allow-Origin:\*才可以。

本次我们项目中使用的就是 window.addEventListener 来捕获错误

核心代码如下

监听前端异常事件,用于捕获错误
window.addEventListener('error', e => errorHandler(e), true);

api接口错误先行处理
const apiErrorHandler = error => {
    if (error.response.status !== 400) {
        let _err = {
            errType: '接口错误',
            errCode: error.response.data.errorCode,
            message: error.response.data.errMsg,
            APIURL: error.config.url,
            data: error.config.data,
            statusCode: error.response.status
        };
        errorHandler(_err);
    }
};

【code、api】异常收集处理函数
const errorHandler = (e, t) => {
    要收集的信息对象
    let basicInfo = {
        errType: e.errType || '代码错误',
        createDate: '',
        projectId: 10003,
        projectName: document.title,
        projectUrl: window.location.href,
        stack: '',
        fileName: '',
        message: '',
        cookies: JSON.stringify(document.cookie),
        localStorage: JSON.stringify(window.localStorage),
        sessionStorage: JSON.stringify(window.sessionStorage),
        设备信息
        ..._AgentInfo._init()
    };
    basicInfo.createDate = formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss');
    收集【接口请求错误】
    if (e.errType) {
        basicInfo.message = e.message;
        basicInfo.errCode = e.errCode;
        basicInfo.APIURL = e.APIURL;
        basicInfo.data = e.data;
        basicInfo.statusCode = e.statusCode;
        delete basicInfo.fileName;
    } else {
        收集【非接口请求错误】
        if (t) {
            Vue 报错机制
            basicInfo.stack = e.stack;
            basicInfo.message = e.message;
        } else {
            Window 报错机制
            if (e.target.localName) {
                if (e.target.localName === 'img') {
                    img[src]:图片请求链接错误监控
                    basicInfo.message = 'Image Not Found: ' + e.target.src;
                    basicInfo.errType = '资源引入错误';
                }
            } else {
                收集【运行时js错误】
                let { message, filename, error } = e;
                if (error) basicInfo.stack = error.stack;
                basicInfo.message = message;
                basicInfo.fileName = filename;
            }
        }
    }

    发送请求,将错误数据保存到数据库
    _ajax({
        method: 'POST',
        url: 'https://t.finlean.top/frontLogApi/saveError',
        data: basicInfo
    });
};

完整错误收集脚本可在这里查看,欢迎查漏补缺

相关文章

  • 前端错误收集脚本

    前端错误分为 JS 运行时错误、接口错误、资源加载错误三种。对于前端的异常捕获,我们都会知道 onerror 事件...

  • 性能优化

    一个开源的前端错误收集工具 frontend-tracker,你值得收藏~ 蒲公英团队最近开发了一款前端错误收集工...

  • 前端代码错误收集

    前端的异常收集常用的两种方式: 原文地址 1.try catch 使用一个webpack的loader babe...

  • 前端错误收集(Vue)

    前言 对开发者:为了更快速的定位及解决bug,减少 JS Error 的错误量;对用户体验:让用户更加流畅的使用我...

  • DIY一个Web前端异常收集器

    一、背景 最近加入了一个刻意练习小组,自选了一个课题。题目:《实现一个前端异常收集器》目标:收集前端的各类错误,包...

  • vue中全局错误捕获方法

    Vue全局配置 errorHandler可以进行全局错误收集,我们可以根据这个特性对前端异常做这样的处理:业务错误...

  • 前端错误日志采集上报

    js-log-report 前端错误日志采集上报、上报给后端分析错误日、主要用于移动端各手机类型错误日志的收集分析...

  • 开源前端脚本错误监控及跟踪解决项目BadJS试用

    摘要: 试用BadJS。 原文:开源前端脚本错误监控及跟踪解决项目-BadJS 试用 作者:过错 Fundebug...

  • 一个开源的前端错误收集工具 frontend-tracker,

    蒲公英团队最近开发了一款前端错误收集工具,名叫 frontend-tracker ,这款工具主要是在前端网页出现错...

  • 前端异常监控

    实现思路 前端 js报错事件监听+上报错误信息 后端 提供接口收集报错 根据前端提供的sourcemap文件解析前...

网友评论

      本文标题:前端错误收集脚本

      本文链接:https://www.haomeiwen.com/subject/ofpazftx.html