diff --git a/packages/studio/src/components/StudioErrorBoundary.tsx b/packages/studio/src/components/StudioErrorBoundary.tsx index 4a1deb6de5..429974bc90 100644 --- a/packages/studio/src/components/StudioErrorBoundary.tsx +++ b/packages/studio/src/components/StudioErrorBoundary.tsx @@ -21,7 +21,8 @@ export class StudioErrorBoundary extends Component { trackStudioEvent("crash", { error_message: error.message, error_name: error.name, - component_stack: info.componentStack?.slice(0, 500) ?? null, + stack_trace: error.stack?.slice(0, 4000) ?? null, + component_stack: info.componentStack?.slice(0, 2000) ?? null, }); } diff --git a/packages/studio/src/main.tsx b/packages/studio/src/main.tsx index ac0a2af59e..52c4433220 100644 --- a/packages/studio/src/main.tsx +++ b/packages/studio/src/main.tsx @@ -7,19 +7,33 @@ import "./styles/studio.css"; trackStudioEvent("session_start"); +function errorProps(value: unknown): { + error_message: string; + error_name: string | null; + stack_trace: string | null; +} { + if (value instanceof Error) { + return { + error_message: value.message, + error_name: value.name, + stack_trace: value.stack?.slice(0, 4000) ?? null, + }; + } + return { error_message: String(value), error_name: null, stack_trace: null }; +} + window.addEventListener("error", (event) => { trackStudioEvent("unhandled_error", { + ...errorProps(event.error), error_message: event.message, - filename: event.filename ?? null, - lineno: event.lineno ?? null, - colno: event.colno ?? null, + filename: event.filename, + lineno: event.lineno, + colno: event.colno, }); }); window.addEventListener("unhandledrejection", (event) => { - trackStudioEvent("unhandled_promise_rejection", { - error_message: event.reason instanceof Error ? event.reason.message : String(event.reason), - }); + trackStudioEvent("unhandled_promise_rejection", errorProps(event.reason)); }); createRoot(document.getElementById("root")!).render(