diff --git a/apps/web/modules/event-types/views/event-types-single-view.getServerSideProps.tsx b/apps/web/modules/event-types/views/event-types-single-view.getServerSideProps.tsx index 8a2034b2cf..1eaaf36266 100644 --- a/apps/web/modules/event-types/views/event-types-single-view.getServerSideProps.tsx +++ b/apps/web/modules/event-types/views/event-types-single-view.getServerSideProps.tsx @@ -1,6 +1,8 @@ import type { GetServerSidePropsContext } from "next"; import { getServerSession } from "@calcom/features/auth/lib/getServerSession"; +import logger from "@calcom/lib/logger"; +import { safeStringify } from "@calcom/lib/safeStringify"; import { asStringOrThrow } from "@lib/asStringOrNull"; import type { inferSSRProps } from "@lib/types/inferSSRProps"; @@ -40,6 +42,7 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => const { eventType } = await ssr.viewer.eventTypes.get.fetch({ id: eventTypeId }); return eventType; } catch (e: unknown) { + logger.error(safeStringify(e)); // reject, user has no access to this event type. return null; } diff --git a/packages/lib/safeStringify.ts b/packages/lib/safeStringify.ts index 7fe0a53152..7bc6b6ba7c 100644 --- a/packages/lib/safeStringify.ts +++ b/packages/lib/safeStringify.ts @@ -5,7 +5,8 @@ export function safeStringify(obj: unknown) { try { if (obj instanceof Error) { // Errors don't serialize well, so we extract what we want - return obj.stack ?? obj.message; + // We stringify so that we can log the error message and stack trace in a single log event + return JSON.stringify(obj.stack ?? obj.message); } // Avoid crashing on circular references return JSON.stringify(obj);