index.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { get, isObject } from 'lodash'
  2. import store from '@/store'
  3. import util from '@/utils/util'
  4. export default {
  5. install (Vue, options) {
  6. function writeLog (logType) {
  7. return (error, vm, info = '') => {
  8. Vue.nextTick(() => {
  9. store.dispatch('ibps/log/push', {
  10. message: `${info}: ${isObject(error) ? error.message : error}`,
  11. type: logType,
  12. meta: {
  13. error,
  14. vm
  15. }
  16. })
  17. if (process.env.NODE_ENV !== 'development') return
  18. util.log.capsule('ibps', 'ErrorHandler', logType)
  19. util.log.danger('>>>>>> 错误信息 >>>>>>')
  20. console.log(info)
  21. // util.log.danger('>>>>>> Vue 实例 >>>>>>')
  22. // console.log(vm)
  23. util.log.danger('>>>>>> Error >>>>>>')
  24. console.log(error)
  25. })
  26. }
  27. }
  28. if (process.env.NODE_ENV === 'development') {
  29. Vue.config.warnHandler = writeLog('warning')
  30. }
  31. Vue.config.errorHandler = writeLog('danger')
  32. window.onunhandledrejection = error => {
  33. store.dispatch('ibps/log/push', {
  34. message: get(error, 'reason.message', 'Unknown error'),
  35. type: 'danger',
  36. meta: {
  37. error: get(error, 'reason'),
  38. trace: get(error, 'reason.stack')
  39. }
  40. })
  41. }
  42. window.onerror = (event, source, lineno, colno, error) => {
  43. if (event === 'ResizeObserver loop limit exceeded') { // 忽略这个错误
  44. return
  45. }
  46. store.dispatch('ibps/log/push', {
  47. message: get(error, 'message', 'Unknown error'),
  48. type: 'danger',
  49. meta: {
  50. error,
  51. trace: get(error, 'stack'),
  52. source: `${source}@${lineno}:${colno}`,
  53. event: event
  54. }
  55. })
  56. }
  57. }
  58. }