From 990f6c8aba87c63c8b6fc802df1024211a04259e Mon Sep 17 00:00:00 2001 From: dvoytenko Date: Wed, 16 Aug 2023 09:39:53 -0700 Subject: [PATCH] OpenTel: ensure that exceptions are recorded on an active span --- .../src/server/app-render/create-error-handler.tsx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/next/src/server/app-render/create-error-handler.tsx b/packages/next/src/server/app-render/create-error-handler.tsx index bfcc4a55d0d2..666efdb99cd1 100644 --- a/packages/next/src/server/app-render/create-error-handler.tsx +++ b/packages/next/src/server/app-render/create-error-handler.tsx @@ -4,6 +4,7 @@ import { formatServerError } from '../../lib/format-server-error' import { isNotFoundError } from '../../client/components/not-found' import { isRedirectError } from '../../client/components/redirect' import { NEXT_DYNAMIC_NO_SSR_CODE } from '../../shared/lib/lazy-dynamic/no-ssr-error' +import { SpanStatusCode, getTracer } from '../lib/trace/tracer' /** * Create error handler for renderers. @@ -56,6 +57,16 @@ export function createErrorHandler({ ) ) ) { + // Record exception in an active span, if available. + const span = getTracer().getActiveScopeSpan() + if (span) { + span.recordException(err) + span.setStatus({ + code: SpanStatusCode.ERROR, + message: err.message, + }) + } + if (errorLogger) { errorLogger(err).catch(() => {}) } else {