Skip to content

Sentry does not capture errors or spans from Cloudflare Workers context.waitUntil() #17476

@the-leonat

Description

@the-leonat

Is there an existing issue for this?

How do you use Sentry?

Sentry Saas (sentry.io)

Which SDK are you using?

@sentry/cloudflare - hono

SDK Version

10.7.0

Framework Version

Hono 4.9.4

Link to Sentry event

No response

Reproduction Example/SDK Setup

export default Sentry.withSentry(
    (_env) => {
        const env = checkBindings(_env)
        const sentryEnabledEnvs: (typeof env.WORKER_ENVIRONMENT)[] = ["production", "staging"]
        const enabled = sentryEnabledEnvs.includes(env.WORKER_ENVIRONMENT)
        if (!enabled) console.info(`Sentry is disabled in env "${env.WORKER_ENVIRONMENT}"`)
        const tracesSampleRate = env.WORKER_ENVIRONMENT === "production" ? 0.1 : 1

        return {
            dsn: env.SENTRY_DSN,
            release: env.VERSION_ID,
            sendDefaultPii: true,
            environment: env.WORKER_ENVIRONMENT,
            enableLogs: true,
            tracesSampleRate,
            enabled,
            integrations: [
                Sentry.consoleLoggingIntegration({ levels: ["log", "error", "warn"] }),
            ],
        }
    },
    app,
)

Steps to Reproduce

import { waitUntil } from "cloudflare:workers"


 .get("/route", async (context) => {
        // some business logic

        async function updateDBAndCache() {
            return Sentry.startSpan({ name: "Update DB and Cache" }, async () => {
                const data = await updateDB()
                await context.get("setMember")(data)
            })
        }
        waitUntil(updateDBAndCache())
        return context.json(result, 200)
    })

 .get("/route-with-error", async (context) => {
        // some business logic

        async function updateDBAndCache() {
            return Sentry.startSpan({ name: "Update DB and Cache" }, async () => {
                const data = await updateDB()
                throw new Error("expected error")
                await context.get("setMember")(data)
            })
        }
        waitUntil(updateDBAndCache())
        return context.json(result, 200)
    })

Expected Result

Span "Update DB and Cache" appears in Sentry as well as seeing the captured exception.

Actual Result

All spans and exceptions in waitUntil are lost.

Metadata

Metadata

Assignees

Projects

Status

No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions