Originally posted by chris-erickson November 21, 2022
I'm struggling a lot to understand why the server-side error handling isn't working. We have had client side working for quite some time, I'm not sure if server side has ever worked for us (so, I can't point specifically to something we maybe changed as a clue).
Versions:
"next": "13.0.4",
"@sentry/nextjs": "7.20.0",
I made a testing page that will throw either in getServerSideProps directly, or in an async function called there (to simulate a third-party API call that dies for some reason). When I load the page in Vercel, the logs emit:
Sentry Logger [log]: Initializing SDK...
Sentry Logger [log]: Integration installed: InboundFilters
Sentry Logger [log]: Integration installed: FunctionToString
Sentry Logger [log]: Integration installed: Console
Sentry Logger [log]: Integration installed: Http
Sentry Logger [log]: Integration installed: OnUncaughtException
Sentry Logger [log]: Integration installed: OnUnhandledRejection
Sentry Logger [log]: Integration installed: ContextLines
Sentry Logger [log]: Integration installed: Context
Sentry Logger [log]: Integration installed: Modules
Sentry Logger [log]: Integration installed: RequestData
Sentry Logger [log]: Integration installed: LinkedErrors
Sentry Logger [log]: Integration installed: RewriteFrames
Sentry Logger [log]: SDK successfully initialized
Sentry Logger [log]: [Tracing] starting http.server transaction - /errorTester
Sentry Logger [log]: [Tracing] Starting 'function.nextjs' span on transaction '/errorTester' (8e631fbcf4828329).
Sentry Logger [log]: [Tracing] Finishing 'function.nextjs' span on transaction '/errorTester' (8e631fbcf4828329).
2022-11-21T17:02:12.769Z 041218a1-9b0d-4a17-ae99-7c9a27170c39 ERROR Error: This happened inside the API
at tester (/var/task/packages/site/.next/server/pages/errorTester.js:51:11)
at getServerSideProps (/var/task/packages/site/.next/server/pages/errorTester.js:71:15)
at /var/task/node_modules/@sentry/nextjs/cjs/config/wrappers/wrapperUtils.js:34:33
at /var/task/node_modules/@sentry/nextjs/cjs/config/wrappers/wrapperUtils.js:113:20
at bound (node:domain:421:15)
at runBound (node:domain:432:12)
at Object.callTracedServerSideDataFetcher (/var/task/node_modules/@sentry/nextjs/cjs/config/wrappers/wrapperUtils.js:128:5)
at /var/task/node_modules/@sentry/nextjs/cjs/config/wrappers/withSentryGetServerSideProps.js:32:50
at Object.renderToHTML (/var/task/node_modules/next/dist/server/render.js:506:26)
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
page: '/errorTester'
}
RequestId: 041218a1-9b0d-4a17-ae99-7c9a27170c39 Error: Runtime exited with error: exit status 1
Runtime.ExitError
when I run it locally with build/serve I get:
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
info - Loaded env from /Users/me/Development/ginrickey/packages/site/.env.local
info - Loaded env from /Users/me/Development/ginrickey/packages/site/.env.production
Sentry Logger [log]: Initializing SDK...
Sentry Logger [log]: Integration installed: InboundFilters
Sentry Logger [log]: Integration installed: FunctionToString
Sentry Logger [log]: Integration installed: Console
Sentry Logger [log]: Integration installed: Http
Sentry Logger [log]: Integration installed: OnUncaughtException
Sentry Logger [log]: Integration installed: OnUnhandledRejection
Sentry Logger [log]: Integration installed: ContextLines
Sentry Logger [log]: Integration installed: Context
Sentry Logger [log]: Integration installed: Modules
Sentry Logger [log]: Integration installed: RequestData
Sentry Logger [log]: Integration installed: LinkedErrors
Sentry Logger [log]: Integration installed: RewriteFrames
Sentry Logger [log]: SDK successfully initialized
Sentry Logger [log]: [Tracing] starting http.server transaction - /errorTester
Sentry Logger [log]: [Tracing] starting http.server transaction - /errorTester
Sentry Logger [log]: [Tracing] Starting 'function.nextjs' span on transaction '/errorTester' (848e345adae7a90f).
Sentry Logger [log]: [Tracing] Finishing 'function.nextjs' span on transaction '/errorTester' (848e345adae7a90f).
Sentry Logger [log]: Not capturing exception because it's already been captured.
Error: This happened inside the API
at tester (/Users/me/Development/ginrickey/packages/site/.next/server/pages/errorTester.js:51:11)
at getServerSideProps (/Users/me/Development/ginrickey/packages/site/.next/server/pages/errorTester.js:71:15)
at /Users/me/Development/ginrickey/node_modules/@sentry/nextjs/cjs/config/wrappers/wrapperUtils.js:34:33
at /Users/me/Development/ginrickey/node_modules/@sentry/nextjs/cjs/config/wrappers/wrapperUtils.js:113:20
at bound (node:domain:421:15)
at runBound (node:domain:432:12)
at Object.callTracedServerSideDataFetcher (/Users/me/Development/ginrickey/node_modules/@sentry/nextjs/cjs/config/wrappers/wrapperUtils.js:128:5)
at /Users/me/Development/ginrickey/node_modules/@sentry/nextjs/cjs/config/wrappers/withSentryGetServerSideProps.js:32:50
at Object.renderToHTML (/Users/me/Development/ginrickey/node_modules/next/dist/server/render.js:506:26)
at runMicrotasks (<anonymous>)
Sentry Logger [log]: [Tracing] Starting 'function.nextjs' span on transaction '/errorTester' (848e345adae7a90f).
Sentry Logger [log]: Not capturing exception because it's already been captured.
Sentry: should send
Sentry: should send
Sentry Logger [log]: [Tracing] Finishing 'function.nextjs' span on transaction '/errorTester' (848e345adae7a90f).
Sentry Logger [log]: [Tracing] Starting 'function.nextjs' span on transaction '/errorTester' (848e345adae7a90f).
Sentry Logger [log]: [Tracing] Finishing 'function.nextjs' span on transaction '/errorTester' (848e345adae7a90f).
Sentry Logger [log]: [Tracing] Finishing http.server transaction: /errorTester.
Sentry Logger [log]: Flushing events...
Sentry Logger [log]: Done flushing events
Sentry Logger [log]: [Tracing] Finishing http.server transaction: /500.
note that
Sentry: should send
Sentry: should send
comes from the sentry.server.config.js and it's only present in the local use case. This leads me to believe something is disabling sentry when it's deployed but I don't for the life of me know what could be doing that or how to examine it.
import*asSentryfrom'@sentry/nextjs';constSENTRY_DSN=process.env.SENTRY_DSN||process.env.NEXT_PUBLIC_SENTRY_DSN;Sentry.init({dsn: SENTRY_DSN,environment: process.env.ACTIVE_ENV,tracesSampleRate: 1.0,debug: true,beforeSend: (e)=>{console.log('Sentry: should send');returne;},});Relevant parts of the next config looks like
const{ formatInTimeZone }=require('date-fns-tz');const{ withSentryConfig }=require('@sentry/nextjs');constENVIRONMENTS={DEV: 'dev',STAGE: 'staging',PROD: 'production',};constnextjsEnvironment=process.env.ACTIVE_ENV;letENVIRONMENT;if(nextjsEnvironment===ENVIRONMENTS.STAGE){ENVIRONMENT=ENVIRONMENTS.STAGE;}elseif(nextjsEnvironment===ENVIRONMENTS.PROD){ENVIRONMENT=ENVIRONMENTS.PROD;}else{ENVIRONMENT=ENVIRONMENTS.DEV;}constisDev=nextjsEnvironment!==ENVIRONMENTS.STAGE&&nextjsEnvironment!==ENVIRONMENTS.PROD;constisProd=nextjsEnvironment===ENVIRONMENTS.PROD;constSITE_URL=process.env.SITE_URL||process.env.URL||process.env.DEPLOY_URL||'https://oursite';constBRANCH=process.env.VERCEL_GIT_COMMIT_REF||process.env.BRANCH||'unset';constpossibleCommitRef=process.env.VERCEL_GIT_COMMIT_SHA||process.env.COMMIT_REF||'000000';constCOMMIT_REF=possibleCommitRef.slice(0,6);constnow=newDate();constBUILD_DATETIME_HUMAN=formatInTimeZone(now,'America/Chicago',`EEE. MMMM d, yyyy, K:mm aa 'Central'`);constSentryWebpackPluginOptions={silent: false,debug: true,};/** * @type {import('next').NextConfig} */constnextConfig={swcMinify: true,reactStrictMode: true,trailingSlash: false,productionBrowserSourceMaps: true,images: {domains: ['cdn.sanity.io'],// disableStaticImages: true,},// These vars are injected at build time, and are accessible as `process.env.KEY` in site codeenv: {BRANCH: BRANCH,COMMIT_REF: COMMIT_REF,BUILD_DATETIME_HUMAN: BUILD_DATETIME_HUMAN,ACTIVE_ENV: ENVIRONMENT,SITE_URL: SITE_URL,SANITY_PROJECT_ID: process.env.SANITY_PROJECT_ID,SANITY_DATASET: process.env.SANITY_DATASET,SANITY_READ_TOKEN: process.env.SANITY_READ_TOKEN||'',THEMIS_URL: process.env.THEMIS_URL||'https://example.com/graphql',GIT_REF: process.env.COMMIT_REF,SENTRY_DSN: process.env.SENTRY_DSN,FATHOM_SITE_ID: process.env.FATHOM_SITE_ID,MAPBOX_TOKEN: process.env.MAPBOX_TOKEN,ENVIRONMENTS: ENVIRONMENTS,IS_PROD: isProd,},eslint: {// We check in CI, so this is duplicate effort: https://nextjs.org/docs/api-reference/next.config.js/ignoring-eslintignoreDuringBuilds: true,},webpack: (config,options)=>{config.module.rules.push({test: /\.svg$/,use: [options.defaultLoaders.babel,{loader: '@svgr/webpack',options: {babel: false},},],});returnconfig;},};module.exports=withSentryConfig(nextConfig,SentryWebpackPluginOptions);```</div>
Discussed in #6254
Originally posted by chris-erickson November 21, 2022
I'm struggling a lot to understand why the server-side error handling isn't working. We have had client side working for quite some time, I'm not sure if server side has ever worked for us (so, I can't point specifically to something we maybe changed as a clue).
Versions:
I made a testing page that will throw either in
getServerSidePropsdirectly, or in an async function called there (to simulate a third-party API call that dies for some reason). When I load the page in Vercel, the logs emit:when I run it locally with
build/serveI get:note that
comes from the
sentry.server.config.jsand it's only present in the local use case. This leads me to believe something is disabling sentry when it's deployed but I don't for the life of me know what could be doing that or how to examine it.Relevant parts of the next config looks like