diff --git a/src/utils/fetch-timeout.test.ts b/src/utils/fetch-timeout.test.ts index 80b8cba73ce..b0724d24c2c 100644 --- a/src/utils/fetch-timeout.test.ts +++ b/src/utils/fetch-timeout.test.ts @@ -37,6 +37,8 @@ describe("buildTimeoutAbortSignal", () => { timeoutMs: 25, operation: "unit-test", url: "https://example.com/v1/responses", + consoleMessage: + "fetch timeout after 25ms (elapsed 25ms) operation=unit-test url=https://example.com/v1/responses", }), ); diff --git a/src/utils/fetch-timeout.ts b/src/utils/fetch-timeout.ts index 16d5f30d916..52fe29d6335 100644 --- a/src/utils/fetch-timeout.ts +++ b/src/utils/fetch-timeout.ts @@ -64,9 +64,19 @@ function abortDueToTimeout( return; } const sanitizedUrl = sanitizeTimeoutLogUrl(url); + const elapsedMs = Math.max(0, Date.now() - startedAtMs); + const consoleMessage = [ + `fetch timeout after ${timeoutMs}ms`, + `(elapsed ${elapsedMs}ms)`, + operation ? `operation=${operation}` : null, + sanitizedUrl ? `url=${sanitizedUrl}` : null, + ] + .filter((part): part is string => Boolean(part)) + .join(" "); log.warn("fetch timeout reached; aborting operation", { timeoutMs, - elapsedMs: Math.max(0, Date.now() - startedAtMs), + elapsedMs, + consoleMessage, ...(operation ? { operation } : {}), ...(sanitizedUrl ? { url: sanitizedUrl } : {}), });