Reputation: 7655
I have a JavaScript error object that I have caught in code. It has a name, message, stack etc that I want to log at the backend. I am using sentry for that. But before logging I want to change the name or the message of the error.
What will be the best way to do it?
I tried creating a new error and adding the original error as cause
, but that did not work with sentry. It just logs the error passed as the cause of the new error.
new Error('Additional error message', { cause: originalError });
I need the rest of the properties of the error to remain the same, just need to change the name or message.
Upvotes: 6
Views: 6799
Reputation: 2104
In addition to @Anastasia Plaskevich's answer, It appears that you can also change the Error type like this:
Sentry.captureException(error, (scope) => {
scope.addEventProcessor((event) => {
if (event.exception?.values) {
event.exception.values[0] = {
...event.exception.values[0],
type: '🤦♂️ My Bad Error',
};
}
return event;
});
return scope;
});
Then you'll see something like this:
Upvotes: 1
Reputation: 11116
A super helpful thing you can do to accomplish this is actually create your own custom error types. This can be done by simply using a class that extends the Error constructor, like so:
class MyError extends Error {
constructor(message) {
super();
this.name = "MyError";
this.message = message;
}
}
try {
throw new MyError('this is my error')
} catch (err) {
console.log(err instanceof Error);
console.log(err.message);
console.log(err.name);
console.log(err.stack);
}
class ExtendedError extends Error {
constructor(message, { cause }) {
super();
this.name = "ExtendedError";
this.message = message;
// set the cause to maintain linkage to the original error
this.cause = cause;
}
}
try {
throw new Error('Something bad happened!');
} catch (err) {
let extendedError = new ExtendedError('Additional details', { cause: err });
console.log(extendedError instanceof Error);
console.log(extendedError.message);
console.log(extendedError.name);
console.log(extendedError.cause.stack);
console.log(extendedError.stack);
}
Upvotes: 2
Reputation: 155
I've made errors a bit readable with this:
when you capture exception, add transactionName to scope
.
you can also enhance event in beforeSend
method
Sentry.captureException(error, (scope) => {
...
scope.setTransactionName(`my custom title for error`);
return scope;
});
Upvotes: 10