DEV Community

Cover image for Improved Error Tracking for Node.js in AppSignal
Luismi Ramírez for AppSignal

Posted on • Originally published at blog.appsignal.com

Improved Error Tracking for Node.js in AppSignal

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:

const tracer = appsignal.tracer();

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

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:

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
  });
}
Enter fullscreen mode Exit fullscreen mode

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

const tracer = appsignal.tracer();

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

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 (https://www.appsignal.com/nodejs).

Here's what you need to know:

  • Error monitoring is included alongside all of our features.
  • We have a free trial option that doesn’t require a credit card.
  • AppSignal supports Node.js, Ruby, and Elixir projects.
  • We’re free for open source & for good projects.
  • We ship stroopwafels to our trial users on request.

Discussion (0)