Weex 异常监控

需要做 Weex 容器内的异常监控。基于 Vue 的一些可以被监控到,但是有些错误是被 Weex 源码所捕获,比如 Promise,各位有做过的话,这类问题是如何解决的?

// 获取当前的叶子节点
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 = (err, vm, info) => {
  // logger.toServer({err, vm, info})
  let componentName = 'not found';
  if (vm) {
    componentName = formatComponentName(vm);
  }
  let errorInfo = `\n------------------------weex monitor--------------------
  method: errorHandler
  name: ${err.name}
  message: ${err.message}
  callstack:${err.stack}`

  console.error(`\n错误信息:${errorInfo}
  发生错误的组件:${componentName}
  具体信息:${info}\n`)
}


Vue.config.warnHandler = (msg, vm, trace) => {
  let componentName = 'not found';
  if (vm) {
    componentName = formatComponentName(vm);
  }
  let message = `\n\nmessage:${msg} \n\ncomponent:${componentName}\n\ntrace:${trace}`;
  console.error(`警告信息:${message}`)
}

App.el = '#root'
App.renderError = (h, err) => {
  console.error(`renderError:${h}, ${JSON.stringify(err)}`)
}
/* eslint-disable no-new */
new Vue(App)
阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏