Skip to content

Commit 992d5be

Browse files
committed
add debug logs to onSegmentPrerenderError
1 parent 470ea7e commit 992d5be

File tree

4 files changed

+69
-14
lines changed

4 files changed

+69
-14
lines changed

packages/next/errors.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -943,5 +943,6 @@
943943
"942": "Unexpected stream chunk while in Before stage",
944944
"943": "getFlightStream should always receive a ReadableStream when using the edge runtime",
945945
"944": "nodeStreamFromReadableStream cannot be used in the edge runtime",
946-
"945": "createNodeStreamFromChunks cannot be used in the edge runtime"
946+
"945": "createNodeStreamFromChunks cannot be used in the edge runtime",
947+
"946": "Route %s errored during %s. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled.\n \nOriginal Error: %s"
947948
}

packages/next/src/server/app-render/app-render.tsx

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,10 @@ import {
171171
createReactServerPrerenderResultFromRender,
172172
prerenderAndAbortInSequentialTasks,
173173
} from './app-render-prerender-utils'
174-
import { printDebugThrownValueForProspectiveRender } from './prospective-render-utils'
174+
import {
175+
Phase,
176+
printDebugThrownValueForProspectiveRender,
177+
} from './prospective-render-utils'
175178
import {
176179
pipelineInSequentialTasks,
177180
scheduleInSequentialTasks,
@@ -1086,7 +1089,11 @@ async function prospectiveRuntimeServerPrerender(
10861089
process.env.NEXT_DEBUG_BUILD ||
10871090
process.env.__NEXT_VERBOSE_LOGGING
10881091
) {
1089-
printDebugThrownValueForProspectiveRender(err, workStore.route)
1092+
printDebugThrownValueForProspectiveRender(
1093+
err,
1094+
workStore.route,
1095+
Phase.ProspectiveRender
1096+
)
10901097
}
10911098
},
10921099
// We don't want to stop rendering until the cacheSignal is complete so we pass
@@ -1123,7 +1130,11 @@ async function prospectiveRuntimeServerPrerender(
11231130
) {
11241131
// We don't normally log these errors because we are going to retry anyway but
11251132
// it can be useful for debugging Next.js itself to get visibility here when needed
1126-
printDebugThrownValueForProspectiveRender(err, workStore.route)
1133+
printDebugThrownValueForProspectiveRender(
1134+
err,
1135+
workStore.route,
1136+
Phase.ProspectiveRender
1137+
)
11271138
}
11281139
return null
11291140
}
@@ -3851,7 +3862,11 @@ async function warmupModuleCacheForRuntimeValidationInDev(
38513862
) {
38523863
// We don't normally log these errors because we are going to retry anyway but
38533864
// it can be useful for debugging Next.js itself to get visibility here when needed
3854-
printDebugThrownValueForProspectiveRender(err, workStore.route)
3865+
printDebugThrownValueForProspectiveRender(
3866+
err,
3867+
workStore.route,
3868+
Phase.ProspectiveRender
3869+
)
38553870
}
38563871
},
38573872
// We don't need bootstrap scripts in this prerender
@@ -3882,7 +3897,11 @@ async function warmupModuleCacheForRuntimeValidationInDev(
38823897
) {
38833898
// We don't normally log these errors because we are going to retry anyway but
38843899
// it can be useful for debugging Next.js itself to get visibility here when needed
3885-
printDebugThrownValueForProspectiveRender(err, workStore.route)
3900+
printDebugThrownValueForProspectiveRender(
3901+
err,
3902+
workStore.route,
3903+
Phase.ProspectiveRender
3904+
)
38863905
}
38873906
})
38883907

@@ -4376,7 +4395,11 @@ async function prerenderToStream(
43764395
process.env.NEXT_DEBUG_BUILD ||
43774396
process.env.__NEXT_VERBOSE_LOGGING
43784397
) {
4379-
printDebugThrownValueForProspectiveRender(err, workStore.route)
4398+
printDebugThrownValueForProspectiveRender(
4399+
err,
4400+
workStore.route,
4401+
Phase.ProspectiveRender
4402+
)
43804403
}
43814404
},
43824405
// We don't want to stop rendering until the cacheSignal is complete so we pass
@@ -4428,7 +4451,11 @@ async function prerenderToStream(
44284451
) {
44294452
// We don't normally log these errors because we are going to retry anyway but
44304453
// it can be useful for debugging Next.js itself to get visibility here when needed
4431-
printDebugThrownValueForProspectiveRender(err, workStore.route)
4454+
printDebugThrownValueForProspectiveRender(
4455+
err,
4456+
workStore.route,
4457+
Phase.ProspectiveRender
4458+
)
44324459
}
44334460
}
44344461

@@ -4499,7 +4526,11 @@ async function prerenderToStream(
44994526
) {
45004527
// We don't normally log these errors because we are going to retry anyway but
45014528
// it can be useful for debugging Next.js itself to get visibility here when needed
4502-
printDebugThrownValueForProspectiveRender(err, workStore.route)
4529+
printDebugThrownValueForProspectiveRender(
4530+
err,
4531+
workStore.route,
4532+
Phase.ProspectiveRender
4533+
)
45034534
}
45044535
},
45054536
bootstrapScripts: [bootstrapScript],
@@ -4529,7 +4560,11 @@ async function prerenderToStream(
45294560
) {
45304561
// We don't normally log these errors because we are going to retry anyway but
45314562
// it can be useful for debugging Next.js itself to get visibility here when needed
4532-
printDebugThrownValueForProspectiveRender(err, workStore.route)
4563+
printDebugThrownValueForProspectiveRender(
4564+
err,
4565+
workStore.route,
4566+
Phase.ProspectiveRender
4567+
)
45334568
}
45344569
})
45354570

packages/next/src/server/app-render/collect-segment-data.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ import {
2727
HEAD_REQUEST_KEY,
2828
} from '../../shared/lib/segment-cache/segment-value-encoding'
2929
import { getDigestForWellKnownError } from './create-error-handler'
30+
import {
31+
Phase,
32+
printDebugThrownValueForProspectiveRender,
33+
} from './prospective-render-utils'
34+
import { workAsyncStorage } from './work-async-storage.external'
3035

3136
// Contains metadata about the route tree. The client must fetch this before
3237
// it can fetch any actual segment data.
@@ -85,6 +90,14 @@ function onSegmentPrerenderError(error: unknown) {
8590
}
8691
// We don't need to log the errors because we would have already done that
8792
// when generating the original Flight stream for the whole page.
93+
if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) {
94+
const workStore = workAsyncStorage.getStore()
95+
printDebugThrownValueForProspectiveRender(
96+
error,
97+
workStore?.route ?? 'unknown route',
98+
Phase.SegmentCollection
99+
)
100+
}
88101
}
89102

90103
export async function collectSegmentData(

packages/next/src/server/app-render/prospective-render-utils.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
import { getDigestForWellKnownError } from './create-error-handler'
22
import { isReactLargeShellError } from './react-large-shell-error'
33

4+
export enum Phase {
5+
ProspectiveRender = 'the prospective render',
6+
SegmentCollection = 'segment collection',
7+
}
8+
49
export function printDebugThrownValueForProspectiveRender(
510
thrownValue: unknown,
6-
route: string
11+
route: string,
12+
phase: Phase
713
) {
814
// We don't need to print well-known Next.js errors.
915
if (getDigestForWellKnownError(thrownValue)) {
@@ -28,7 +34,7 @@ export function printDebugThrownValueForProspectiveRender(
2834
const stackStart = originalErrorStack.indexOf('\n')
2935
if (stackStart > -1) {
3036
const error = new Error(
31-
`Route ${route} errored during the prospective render. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled.
37+
`Route ${route} errored during ${phase}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled.
3238
3339
Original Error: ${message}`
3440
)
@@ -43,14 +49,14 @@ Original Error: ${message}`
4349
}
4450

4551
if (message) {
46-
console.error(`Route ${route} errored during the prospective render. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. No stack was provided.
52+
console.error(`Route ${route} errored during ${phase}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. No stack was provided.
4753
4854
Original Message: ${message}`)
4955
return
5056
}
5157

5258
console.error(
53-
`Route ${route} errored during the prospective render. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. The thrown value is logged just following this message`
59+
`Route ${route} errored during ${phase}. These errors are normally ignored and may not prevent the route from prerendering but are logged here because build debugging is enabled. The thrown value is logged just following this message`
5460
)
5561
console.error(thrownValue)
5662
return

0 commit comments

Comments
 (0)