[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[] = [];
|
const cancelHandlers: listenerHandler[] = [];
|
||||||
// add listener to thrown errors
|
// add listener to thrown errors
|
||||||
if (logOptions.level.includes('error')) {
|
if (logOptions.level.includes('error')) {
|
||||||
if (window) {
|
const errorHandler = (event: ErrorEvent) => {
|
||||||
const errorHandler = (event: ErrorEvent) => {
|
const message = event.message,
|
||||||
const message = event.message,
|
error = event.error as Error;
|
||||||
error = event.error as Error;
|
const trace: string[] = ErrorStackParser.parse(
|
||||||
const trace: string[] = ErrorStackParser.parse(
|
error,
|
||||||
error,
|
).map((stackFrame: StackFrame) => stackFrame.toString());
|
||||||
).map((stackFrame: StackFrame) => stackFrame.toString());
|
const payload = [stringify(message, logOptions.stringifyOptions)];
|
||||||
const payload = [stringify(message, logOptions.stringifyOptions)];
|
cb({
|
||||||
cb({
|
level: 'error',
|
||||||
level: 'error',
|
trace,
|
||||||
trace,
|
payload,
|
||||||
payload,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
window.addEventListener('error', errorHandler);
|
|
||||||
cancelHandlers.push(() => {
|
|
||||||
if (window) window.removeEventListener('error', errorHandler);
|
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
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) {
|
for (const levelType of logOptions.level) {
|
||||||
cancelHandlers.push(replace(logger, levelType));
|
cancelHandlers.push(replace(logger, levelType));
|
||||||
|
|||||||
Reference in New Issue
Block a user