ionic4-GlobalErrorHandler(全局异常捕捉与处理)

ionic4-GlobalErrorHandler(全局异常捕捉与处理)

node 10.15.0
ionic 4.12.0
cordova 9.0
# platforms
cordova-android:8.0.0
cordova-ios: 5.0.0

欢迎访问我的专栏:
ionic4 混合开发实战-csdn
ionic4 混合开发实战-简书

前言

Angular2+使用TypeScript语言,经编译器转换后生成的代码基本无可读性,所以如果需要查看详细错误信息,还需要在打包时配置source-map

"prod": "ng build --aot=true  --prod --source-map=true"
# 或者 angular.json
configurations -> production -> sourceMap : true

为什么需要捕捉全局异常?

在实际应用场景中,当程序发生错误时,我们需要第一时间知道,而不是由客户发现,这样就需要一个日志上报功能(其他日志不在本文讨论范围内);那我们只需在全局捕捉到错误,然后将一些必要信息上传到后端,最后进行分析排查,解决问题。

如何捕捉?

定义GlobalErrorHandler类

import { ErrorHandler, Injectable, Injector } from '@angular/core';
import { LocationStrategy, PathLocationStrategy } from '@angular/common';
import { NGXLogger } from 'ngx-logger';
import * as StackTrace from 'stacktrace-js';

/**
 * 全局异常处理
 */
@Injectable()
export class GlobalErrorHandler implements ErrorHandler {
  constructor(private injector: Injector) { }
  handleError(error) {
    const loggingService = this.injector.get(NGXLogger);
    const location = this.injector.get(LocationStrategy);
    const message = error.message ? error.message : error.toString();
    const url = location instanceof PathLocationStrategy ? location.path() : '';
    // get the stack trace, lets grab the last 10 stacks only
    StackTrace.fromError(error).then(stackframes => {
      const stackString = stackframes
        .splice(0, 20)
        .map(function(sf) {
          return sf.toString();
        }).join('\n');
      console.log(stackString);
      loggingService.error('error', {message: message, stack: stackString});
    });
    throw error;
  }
}

第三方库:

  • stacktrace-js 堆栈追踪
  • ngx-logger 日志(支持发送到服务器)

第一步

实现ErrorHandler的handleError方法

第二步

堆栈追踪,利用stacktrace-js提供的StackTrace.fromError(error)方法进行堆栈信息追踪

第三步

发送错误日志,此处使用了ngx-logger

第四步

app.moudle.ts

{provide: ErrorHandler, useClass: GlobalErrorHandler}

测试

模拟错误

errorTest = [];
let a = this.errorTest[0]['name'];

结果

image.png

下一篇开始常用插件的使用。

欢迎访问我的专栏:
ionic4 混合开发实战-csdn
ionic4 混合开发实战-简书

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值