Vue 控制台报错信息收集并上报

3 篇文章 0 订阅
3 篇文章 0 订阅
Vue 控制台报错信息收集并上报
自己理解为什么,直接上代码
import axios from 'axios';

export default class JsReport {

    private getToken;
    private prefix: string;

    constructor(prefix, getToken) {
        console.log('js reporter init success');
        this.getToken = getToken;
        this.prefix = prefix;
    }

    /*
    * 合并对象,将配置的参数也一并上报
    */
    _cloneObj(oldObj) {
        if (typeof(oldObj) != 'object') return oldObj;
        if (oldObj == null) return oldObj;
        var newObj = new Object();
        for (var prop in oldObj)
            newObj[prop] = oldObj[prop];
        return newObj;
    }

    /**
     * 扩展对象
     */
    _extendObj() {
        var args = arguments;
        if (args.length < 2) {return;}
        var temp = this._cloneObj(args[0]); //调用复制对象方法
        for (var n = 1,len=args.length; n <len; n++){
            for (var index in args[n]) {
                temp[index] = args[n][index];
            }
        }
        return temp;
    }

    send(msg: string | Event, url: string, line: number, col: number, error: any) {

        let defaults = {
            errMsg: msg,
            location: url,
            lineNumber: line,
            columnNumber: col,
            errDetail: error,
        }


        if (error && error.stack) {
            defaults.errDetail = error.stack.toString();
        } else if (arguments.callee) {
            let ext = [];
            let fn = arguments.callee.caller;
            let floor = 3;

            while (fn && (--floor > 0)) {
                ext.push(fn.toString());
                if (fn == fn.caller) {
                    break;
                }
                fn = fn.caller;
            }
            defaults.errDetail = ext.join(",");
        }

        let headers = {
            'Content-Type': 'application/json',
            'Authorization': this.getToken
        }

        axios.put(
            this.prefix + '/log/front/err/log', 
            defaults, 
            { headers }
        ).then(res => {
            if (res.status == 200 && res.data.code == 0) {
                console.log('错误上报成功');
            } 
        }).catch(err => {
        })

    }

};

注册

// apiConfig.baseUrl 为不同环境下的前缀,如果没有,空即可
var jsReport = new JsReport(apiConfig.baseUrl, UserProfile.findLoginToken());
// window 的异常步获被 vue 拦截处理掉了
Vue.config.errorHandler = function( err, vm, info) {
    console.log('vue 步获异常 err: ', err);
    jsReport.send(err.message, window.location.href, 0, 0, err)
}

查看结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值