首页 > 解决方案 > 将异常跟踪从角度添加到应用洞察力

问题描述

我正在尝试编写从 Angular 到 azure app 洞察力的异常。如果我执行 JSON.stringify(error),则会记录异常。但是我不想对错误进行字符串化,而是我们可以在不进行字符串化的情况下保存错误吗?

工作代码:

  let exception: IExceptionTelemetry = {
   exception: new Error(JSON.stringify(error)),
 };
 this.appInsights.trackException(exception);

我在下面尝试了没有 stringify 的编码,但它不起作用,即在 azure appInsight 中没有记录错误:

 let exception: IExceptionTelemetry = {
  exception: error
};
this.appInsights.trackException(exception);

 OR
let exception: IExceptionTelemetry = {
   exception: {
     name: error.name,
     message: error.message,
     stack: error.stack
  }
};
this.appInsights.trackException(exception);

我正在使用@microsoft/applicationinsights-web ~2.4.4

标签: angularazureazure-application-insights

解决方案


不适用于 App Insights,但观察您的示例,我认为您应该尝试在“异常”中再添加一个嵌套级别,如下所示:

const {message, name, stack} = error;

let exception: IExceptionTelemetry = {
  exception: {
    message: {message, name, stack},
    ...
  },
};

还想在这里强调两件事:

  1. 如果error是类的实际实例Error(不是自定义对象),则比JSON.stringify(error) === "{}",因为“消息”和“堆栈”不是“错误”中的可枚举字段...所以当您处理错误字段时,您必须访问它们含蓄地。
  2. 在这种情况下,App Insight 将接收一个对象而不是字符串化对象。这是对的吗?

更新 我在文档中找到了这个:

appInsights.trackException({exception: new Error('some error')});

所以也许这会起作用:

const {message, name, stack} = error;

let exception: IExceptionTelemetry = {
  exception: new Error(message),
};

推荐阅读