3

I have written a custom error class and would like to track the error using Azure Application Insights. I am using Node.js. When I try tracking the custom error I get the following error:

TypeError: Cannot read property 'stack' of undefined
    at Function.EnvelopeFactory.createExceptionData (/Users/liam/Desktop/CustomError/node_modules/applicationinsights/out/Library/EnvelopeFactory.js:145:40)
    at Function.EnvelopeFactory.createEnvelope (/Users/liam/Desktop/CustomError/node_modules/applicationinsights/out/Library/EnvelopeFactory.js:32:40)
    at NodeClient.TelemetryClient.track (/Users/liam/Desktop/CustomError/node_modules/applicationinsights/out/Library/TelemetryClient.js:116:44)
    at NodeClient.TelemetryClient.trackException (/Users/liam/Desktop/CustomError/node_modules/applicationinsights/out/Library/TelemetryClient.js:69:14)
    at Object.<anonymous> (/Users/liam/Desktop/CustomError/app.js:10:8)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)

Here is the code:

class CustomError extends Error {  
    constructor (message) {
      super(message)
      
      Error.captureStackTrace(this, this.constructor);
      this.name = this.constructor.name;
      this.status = 404;
    }
  
    statusCode() {
      return this.status
    }
}

const appInsights = require('applicationinsights');
appInsights.setup('MY_KEY').start();
let client = appInsights.defaultClient;

const customError = require('./exceptions');
let newError = new customError('The custom error was thrown')

client.trackException(newError);

I have done some research into TelemetryClient objects based on other resources online but I don't think that is the right direction.

I am using this resource as a guide: https://learn.microsoft.com/en-us/azure/azure-monitor/app/api-custom-events-metrics#trackexception

1 Answer 1

1

I was able to solve this problem by passing in a key value pair to trackException where the key is exception and the value is the error:

client.trackException({exception: new customError('This is a custom error')});

Full code:

class CustomError extends Error {  
    constructor (message) {
      super(message)
      
      Error.captureStackTrace(this, this.constructor);
      this.name = this.constructor.name;
      this.status = 404;
    }
  
    statusCode() {
      return this.status
    }
}

const appInsights = require('applicationinsights');
appInsights.setup('MY_KEY').start();
let client = appInsights.defaultClient;

client.trackException({exception: new CustomError('This is a custom error')});

Sign up to request clarification or add additional context in comments.

1 Comment

I had a similar problem and solution. I was passing the NodeJS Error directly to trackException instead of passing the telemetry object and assigning the Error to the exception property.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.