Improved Error Tracking for Node.js in AppSignal

Luismi Luismi Ramírez on

Good news for Node.js developers using AppSignal: a new version of our Node.js library is available on npm with improved error tracking.

We’ve added two new helpers to make your life easier as a Node.js developer. One helper allows you to track errors whenever you need to, no matter how many nested spans you have in your current context. The other lets you send an isolated error with no spans or context involved (for more information about spans, check out our docs). Please keep reading to see some usage examples!

Using tracer.setError(error) to Set Errors on Traces in Node.js

If you are a user of AppSignal’s Node.js library, you are probably familiar with the now deprecated helper span.addError(error). This helper allowed you to link an error to any span object. The main issue with this was that if the span calling the function was not a RootSpan, it was ignored. This made error tracking in complex nested contexts a problematic task.

Using the new tracer.setError(error) function will make everything easier and safer. If you want to send an error related to the current trace, you don’t have to search for the root span; the tracer object is always there to receive the error and set it on the current root span.

Example:

1
2
3
4
5
6
7
8
9
const tracer = appsignal.tracer();

tracer.withSpan(tracer.currentSpan(),  (span) => {
  try {
    throw new Error("Oh no!");
  } catch (err) {
    tracer.setError(err);
  }
});

Send Isolated Node.js Errors with tracer.sendError(error, fn())

This new helper is really useful for instrumentation that doesn’t automatically create AppSignal traces to profile, which means anything outside of a web or database context.

The function receives an error object and an optional callback function to set custom metadata as arguments if needed.

Example with metadata:

1
2
3
4
5
6
7
8
9
10
const tracer = appsignal.tracer();

try {
  throw new Error("Oh no!");
} catch (err) {
  tracer.sendError(err, span => {
    span.setName("daily.task"); // Set a recognizable action name
    span.set("user_id", user_id); // Set custom tags
  });
}

Example without metadata (note: this error is grouped in the same incident as errors of the same type without an action name):

1
2
3
4
5
6
7
const tracer = appsignal.tracer();

try {
  throw new Error("Oh no!")
} catch (err) {
  tracer.sendError(err);
}

Track Your Node.js Errors with a Stroopwaffle by Your Side 🍪

If you haven’t yet tried AppSignal for monitoring your Node.js apps, take five minutes and check it out. Here’s what you need to know:

5 favorite Javascript articles

10 latest Javascript articles

Go back
Javascript sorcery icon

Subscribe to

JavaScript Sorcery

A true sorcerer combines ancient wisdom and new discoveries. We'll provide you with both. Sign up for our JavaScript Sorcery email series and receive deep insights about JavaScript, error tracking and other developments.

We'd like to set cookies, read why.