Improve exception handling
This commit is contained in:
parent
aaadfeab72
commit
00199424f7
@ -13,19 +13,7 @@ import reportWebVitals from './reportWebVitals';
|
|||||||
import { GQLClientProvider } from './context/GQLClientContext';
|
import { GQLClientProvider } from './context/GQLClientContext';
|
||||||
import { SERVER_GQL_PATH } from './constants';
|
import { SERVER_GQL_PATH } from './constants';
|
||||||
import { Toaster } from 'components/shared/Toast';
|
import { Toaster } from 'components/shared/Toast';
|
||||||
|
import { LogErrorBoundary } from 'utils/log-error';
|
||||||
import Bugsnag from '@bugsnag/js';
|
|
||||||
import BugsnagPluginReact from '@bugsnag/plugin-react';
|
|
||||||
import BugsnagPerformance from '@bugsnag/browser-performance';
|
|
||||||
|
|
||||||
const bugsnagApiKey = import.meta.env.VITE_BUGSNAG_API_KEY;
|
|
||||||
if (bugsnagApiKey) {
|
|
||||||
Bugsnag.start({
|
|
||||||
apiKey: bugsnagApiKey,
|
|
||||||
plugins: [new BugsnagPluginReact()],
|
|
||||||
});
|
|
||||||
BugsnagPerformance.start({ apiKey: bugsnagApiKey });
|
|
||||||
}
|
|
||||||
|
|
||||||
const root = ReactDOM.createRoot(
|
const root = ReactDOM.createRoot(
|
||||||
document.getElementById('root') as HTMLElement,
|
document.getElementById('root') as HTMLElement,
|
||||||
@ -39,12 +27,8 @@ const gqlEndpoint = `${import.meta.env.VITE_SERVER_URL}/${SERVER_GQL_PATH}`;
|
|||||||
|
|
||||||
const gqlClient = new GQLClient({ gqlEndpoint });
|
const gqlClient = new GQLClient({ gqlEndpoint });
|
||||||
|
|
||||||
const ErrorBoundary = bugsnagApiKey
|
|
||||||
? Bugsnag.getPlugin('react')!.createErrorBoundary(React)
|
|
||||||
: ({ children }: any) => children;
|
|
||||||
|
|
||||||
root.render(
|
root.render(
|
||||||
<ErrorBoundary>
|
<LogErrorBoundary>
|
||||||
<React.StrictMode>
|
<React.StrictMode>
|
||||||
<ThemeProvider>
|
<ThemeProvider>
|
||||||
<GQLClientProvider client={gqlClient}>
|
<GQLClientProvider client={gqlClient}>
|
||||||
@ -54,7 +38,7 @@ root.render(
|
|||||||
</ThemeProvider>
|
</ThemeProvider>
|
||||||
</React.StrictMode>
|
</React.StrictMode>
|
||||||
,
|
,
|
||||||
</ErrorBoundary>,
|
</LogErrorBoundary>,
|
||||||
);
|
);
|
||||||
|
|
||||||
// If you want to start measuring performance in your app, pass a function
|
// If you want to start measuring performance in your app, pass a function
|
||||||
|
@ -58,9 +58,8 @@ export const Login = ({ onDone }: Props) => {
|
|||||||
}
|
}
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
setError(err.message);
|
setError(err.message);
|
||||||
console.log(err.message, err.name, err.details);
|
|
||||||
setProvider(false);
|
|
||||||
logError(err);
|
logError(err);
|
||||||
|
setProvider(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,33 @@
|
|||||||
import Bugsnag from '@bugsnag/js';
|
import Bugsnag from '@bugsnag/js';
|
||||||
|
import BugsnagPluginReact from '@bugsnag/plugin-react';
|
||||||
|
import BugsnagPerformance from '@bugsnag/browser-performance';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
const bugsnagApiKey = import.meta.env.VITE_BUGSNAG_API_KEY;
|
||||||
|
|
||||||
|
if (bugsnagApiKey) {
|
||||||
|
Bugsnag.start({
|
||||||
|
apiKey: bugsnagApiKey,
|
||||||
|
plugins: [new BugsnagPluginReact()],
|
||||||
|
});
|
||||||
|
BugsnagPerformance.start({ apiKey: bugsnagApiKey });
|
||||||
|
}
|
||||||
|
|
||||||
|
export const errorLoggingEnabled = !!bugsnagApiKey;
|
||||||
|
|
||||||
|
export const LogErrorBoundary = bugsnagApiKey
|
||||||
|
? Bugsnag.getPlugin('react')!.createErrorBoundary(React)
|
||||||
|
: ({ children }: any) => children;
|
||||||
|
|
||||||
export function logError(error: Error) {
|
export function logError(error: Error) {
|
||||||
|
let errors: any[] = [error];
|
||||||
|
let safety = 0;
|
||||||
|
while (errors[errors.length - 1].cause && safety < 10) {
|
||||||
|
errors.push('::caused by::', errors[errors.length - 1].cause);
|
||||||
|
safety += 1;
|
||||||
|
}
|
||||||
|
console.error(...errors);
|
||||||
|
|
||||||
if (import.meta.env.VITE_BUGSNAG_API_KEY) {
|
if (import.meta.env.VITE_BUGSNAG_API_KEY) {
|
||||||
Bugsnag.notify(error);
|
Bugsnag.notify(error);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user