[console-plugin] Feat: Record unhandledrejection event (#1104)
* feat/console-plugin/add-unhandledrejection-handler * better error * change the window object to the passed in 'win' * empty * improve serialized error messages --------- Co-authored-by: Yun Feng <yun.feng0817@gmail.com>
This commit is contained in:
@@ -114,25 +114,54 @@ function initLogObserver(
|
||||
const cancelHandlers: listenerHandler[] = [];
|
||||
// add listener to thrown errors
|
||||
if (logOptions.level.includes('error')) {
|
||||
if (window) {
|
||||
const errorHandler = (event: ErrorEvent) => {
|
||||
const message = event.message,
|
||||
error = event.error as Error;
|
||||
const trace: string[] = ErrorStackParser.parse(
|
||||
error,
|
||||
).map((stackFrame: StackFrame) => stackFrame.toString());
|
||||
const payload = [stringify(message, logOptions.stringifyOptions)];
|
||||
cb({
|
||||
level: 'error',
|
||||
trace,
|
||||
payload,
|
||||
});
|
||||
};
|
||||
window.addEventListener('error', errorHandler);
|
||||
cancelHandlers.push(() => {
|
||||
if (window) window.removeEventListener('error', errorHandler);
|
||||
const errorHandler = (event: ErrorEvent) => {
|
||||
const message = event.message,
|
||||
error = event.error as Error;
|
||||
const trace: string[] = ErrorStackParser.parse(
|
||||
error,
|
||||
).map((stackFrame: StackFrame) => stackFrame.toString());
|
||||
const payload = [stringify(message, logOptions.stringifyOptions)];
|
||||
cb({
|
||||
level: 'error',
|
||||
trace,
|
||||
payload,
|
||||
});
|
||||
}
|
||||
};
|
||||
win.addEventListener('error', errorHandler);
|
||||
cancelHandlers.push(() => {
|
||||
win.removeEventListener('error', errorHandler);
|
||||
});
|
||||
const unhandledrejectionHandler = (event: PromiseRejectionEvent) => {
|
||||
let error: Error;
|
||||
let payload: string[];
|
||||
if (event.reason instanceof Error) {
|
||||
error = event.reason;
|
||||
payload = [
|
||||
stringify(
|
||||
`Uncaught (in promise) ${error.name}: ${error.message}`,
|
||||
logOptions.stringifyOptions,
|
||||
),
|
||||
];
|
||||
} else {
|
||||
error = new Error();
|
||||
payload = [
|
||||
stringify('Uncaught (in promise)', logOptions.stringifyOptions),
|
||||
stringify(event.reason, logOptions.stringifyOptions),
|
||||
];
|
||||
}
|
||||
const trace: string[] = ErrorStackParser.parse(
|
||||
error,
|
||||
).map((stackFrame: StackFrame) => stackFrame.toString());
|
||||
cb({
|
||||
level: 'error',
|
||||
trace,
|
||||
payload,
|
||||
});
|
||||
};
|
||||
win.addEventListener('unhandledrejection', unhandledrejectionHandler);
|
||||
cancelHandlers.push(() => {
|
||||
win.removeEventListener('unhandledrejection', unhandledrejectionHandler);
|
||||
});
|
||||
}
|
||||
for (const levelType of logOptions.level) {
|
||||
cancelHandlers.push(replace(logger, levelType));
|
||||
|
||||
Reference in New Issue
Block a user