如何更改 Sentry 中使用的 JavaScript 错误对象的名称或消息?
How can i change the name or message of a JavaScript Error object used in Sentry?
我在代码中发现了一个 JavaScript 错误对象。它有我想在后端记录的名称、消息、堆栈等。我正在为此使用哨兵。但是在记录之前我想更改错误的名称或消息。
最好的方法是什么?
我尝试创建一个新错误并将原始错误添加为 cause
,但这不适用于 sentry。它只是将传递的错误记录为新错误的原因。
new Error('Additional error message', { cause: originalError });
我需要错误的其余属性保持不变,只需要更改名称或消息。
您可以做的一件非常有用的事情就是创建您自己的自定义错误类型。这可以通过简单地使用扩展 Error 构造函数的 class 来完成,如下所示:
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);
}
我用这个使错误更易读:
捕获异常时,将transactionName添加到scope
。
您还可以在 beforeSend
方法中增强事件
Sentry.captureException(error, (scope) => {
...
scope.setTransactionName(`my custom title for error`);
return scope;
});
我在代码中发现了一个 JavaScript 错误对象。它有我想在后端记录的名称、消息、堆栈等。我正在为此使用哨兵。但是在记录之前我想更改错误的名称或消息。
最好的方法是什么?
我尝试创建一个新错误并将原始错误添加为 cause
,但这不适用于 sentry。它只是将传递的错误记录为新错误的原因。
new Error('Additional error message', { cause: originalError });
我需要错误的其余属性保持不变,只需要更改名称或消息。
您可以做的一件非常有用的事情就是创建您自己的自定义错误类型。这可以通过简单地使用扩展 Error 构造函数的 class 来完成,如下所示:
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);
}
我用这个使错误更易读:
捕获异常时,将transactionName添加到scope
。
您还可以在 beforeSend
方法中增强事件
Sentry.captureException(error, (scope) => {
...
scope.setTransactionName(`my custom title for error`);
return scope;
});