设置JS错误接口

说明

  • JS探针版本要求:3.2.1以上。
  • 适用于Vue、React、Angular。
window.TINGYUN.captureException(err[, contextData])
  • err: 框架提供的错误对象或自定义错误对象。 格式为:
{
    message: '错误信息',
    stack: '错误堆栈'
}
  • contextData:用户自定义Error Scope内的信息,例如组件信息等。相当于在error的scope中设置context数据,参数详情参考自定义上传ScopesetContext API的参数。

注意:探针异步加载时需要判断window.TINGYUN对象已存在。

Vue示例

一般在src/main.js中配置:

配置示例:

function formatComponentName(vm) {
    if (vm.$root === vm) return 'root';
    var name = vm._isVue
        ? (vm.$options && vm.$options.name) ||
        (vm.$options && vm.$options._componentTag)
        : vm.name;
    return (
        (name ? 'component <' + name + '>' : 'anonymous component') +
        (vm._isVue && vm.$options && vm.$options.__file
            ? ' at ' + (vm.$options && vm.$options.__file)
            : '')
    );
}

Vue.config.errorHandler = function(err, vm, info) {
    if (!window.TINGYUN) {
        return ;
    }
    if (vm) {
        var componentName = formatComponentName(vm);
        var propsData = vm.$options && vm.$options.propsData;
        window.TINGYUN.captureException(err, {
            componentName: componentName,
            propsData: propsData,
            info: info
        });
    } else {
        window.TINGYUN.captureException(err);
    }
};

React示例

一般在src/index.js中配置:

配置示例:

class ErrorBoundary extends React.Component {
    constructor(props) {
        super(props);
        this.state = { hasError: false };
    }

    componentDidCatch(error, info) {
        this.setState({ hasError: true });
        if (!window.TINGYUN) {
            return ;
        }
        window.TINGYUN.captureException(error, {
            info: info
        });
    }

    render() {
        if (this.state.hasError) {
            return null;
        }
        return this.props.children;
    }
}

ReactDOM.render(<ErrorBoundary> <App /> </ErrorBoundary>, document.getElementById('root'));

Angular示例

一般在app.module.ts中配置:

配置示例:

import { ErrorHandler } from '@angular/core';

export class GlobalErrorHandler implements ErrorHandler {
   handleError(err:any) : void {
        if (!window.TINGYUN) {
           return ;
        }
        window.TINGYUN.captureException(err);
   }
}

@NgModule({
   ...,
   providers: [ { provide: ErrorHandler, useClass: GlobalErrorHandler } ],
   ...
 })
© 2007-2023 北京基调网络股份有限公司 all right reserved,powered by Gitbook本文档更新于: 2023-12-18 16:44

results matching ""

    No results matching ""