[{"data":1,"prerenderedAt":2246},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-astro":444,"-integrate-frameworks-astro-surround":2241},[4,30,80,245,358,413],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"Integrate","\u002Fintegrate","3.integrate",[85,89,157],{"title":36,"path":86,"stem":87,"icon":88},"\u002Fintegrate\u002Foverview","3.integrate\u002F0.overview","i-lucide-plug",{"title":90,"path":91,"stem":92,"children":93,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","3.integrate\u002Fadapters",[94,97,137],{"title":36,"path":95,"stem":96,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","3.integrate\u002Fadapters\u002F01.overview",{"title":98,"path":99,"stem":100,"children":101,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","3.integrate\u002Fadapters\u002Fcloud",[102,107,112,117,122,127,132],{"title":103,"path":104,"stem":105,"icon":106},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","3.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":108,"path":109,"stem":110,"icon":111},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","3.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":113,"path":114,"stem":115,"icon":116},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","3.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":118,"path":119,"stem":120,"icon":121},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","3.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":123,"path":124,"stem":125,"icon":126},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","3.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":128,"path":129,"stem":130,"icon":131},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","3.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":133,"path":134,"stem":135,"icon":136},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","3.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","3.integrate\u002Fadapters\u002Fself-hosted",[142,147,152],{"title":143,"path":144,"stem":145,"icon":146},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","3.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":148,"path":149,"stem":150,"icon":151},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","3.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":153,"path":154,"stem":155,"icon":156},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","3.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":158,"path":159,"stem":160,"children":161,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[162,166,171,176,181,186,191,196,201,206,211,216,221,226,230,235,240],{"title":36,"path":163,"stem":164,"icon":165},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":167,"path":168,"stem":169,"icon":170},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":172,"path":173,"stem":174,"icon":175},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":177,"path":178,"stem":179,"icon":180},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":182,"path":183,"stem":184,"icon":185},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":187,"path":188,"stem":189,"icon":190},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":192,"path":193,"stem":194,"icon":195},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":197,"path":198,"stem":199,"icon":200},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":202,"path":203,"stem":204,"icon":205},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":207,"path":208,"stem":209,"icon":210},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":212,"path":213,"stem":214,"icon":215},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":217,"path":218,"stem":219,"icon":220},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":222,"path":223,"stem":224,"icon":225},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":227,"path":228,"stem":229,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":231,"path":232,"stem":233,"icon":234},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":236,"path":237,"stem":238,"icon":239},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","3.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":241,"path":242,"stem":243,"icon":244},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":246,"path":247,"stem":248,"children":249,"page":29},"Use Cases","\u002Fuse-cases","4.use-cases",[250,254,259,288,316,348,353],{"title":36,"path":251,"stem":252,"icon":253},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":255,"path":256,"stem":257,"icon":258},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":260,"icon":261,"path":262,"stem":263,"children":264,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[265,268,273,278,283],{"title":36,"path":266,"stem":267,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":269,"path":270,"stem":271,"icon":272},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":274,"path":275,"stem":276,"icon":277},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":279,"path":280,"stem":281,"icon":282},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":284,"path":285,"stem":286,"icon":287},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":289,"icon":290,"path":291,"stem":292,"children":293,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[294,297,302,307,311],{"title":36,"path":295,"stem":296,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":298,"path":299,"stem":300,"icon":301},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":303,"path":304,"stem":305,"icon":306},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":308,"path":309,"stem":310,"icon":258},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":312,"path":313,"stem":314,"icon":315},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":317,"icon":318,"path":319,"stem":320,"children":321,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[322,325,330,335,340,344],{"title":36,"path":323,"stem":324,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":326,"path":327,"stem":328,"icon":329},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":331,"path":332,"stem":333,"icon":334},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":336,"path":337,"stem":338,"icon":339},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":341,"path":342,"stem":343,"icon":318},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":345,"path":346,"stem":347,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":349,"path":350,"stem":351,"icon":352},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":354,"path":355,"stem":356,"icon":357},"eve","\u002Fuse-cases\u002Feve","4.use-cases\u002F5.eve","i-custom-eve",{"title":359,"path":360,"stem":361,"children":362,"page":29},"Extend","\u002Fextend","5.extend",[363,367,372,377,382,386,390,394,398,403,408],{"title":36,"path":364,"stem":365,"icon":366},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":368,"path":369,"stem":370,"icon":371},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":373,"path":374,"stem":375,"icon":376},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":378,"path":379,"stem":380,"icon":381},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":345,"path":383,"stem":384,"icon":385},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":387,"path":388,"stem":389,"icon":366},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":391,"path":392,"stem":393,"icon":352},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":395,"path":396,"stem":397,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":399,"path":400,"stem":401,"icon":402},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":404,"path":405,"stem":406,"icon":407},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":409,"path":410,"stem":411,"icon":412},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":414,"path":415,"stem":416,"children":417,"page":29},"Reference","\u002Freference","6.reference",[418,423,426,431,435,440],{"title":419,"path":420,"stem":421,"icon":422},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":312,"path":424,"stem":425,"icon":315},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":427,"path":428,"stem":429,"icon":430},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":432,"path":433,"stem":434,"icon":318},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":436,"path":437,"stem":438,"icon":439},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":441,"path":442,"stem":443,"icon":352},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":445,"title":231,"body":446,"description":2234,"extension":2235,"links":2236,"meta":2237,"navigation":2238,"path":232,"seo":2239,"stem":233,"__hash__":2240},"docs\u002F3.integrate\u002Fframeworks\u002F14.astro.md",{"type":447,"value":448,"toc":2222},"minimark",[449,458,502,511,587,591,596,667,671,1111,1115,1223,1226,1233,1501,1546,1550,1557,1936,1939,1949,1953,1959,2175,2180,2184,2218],[450,451,452,453,457],"p",{},"Astro doesn't have a dedicated evlog integration. Instead, use the core ",[454,455,456],"code",{},"evlog"," package with Astro's middleware to create request-scoped loggers manually.",[459,460,463,466,488],"prompt",{":actions":461,"description":462,"icon":234},"[\"copy\",\"cursor\",\"windsurf\"]","Set up evlog in my Astro app",[450,464,465],{},"Set up evlog in my Astro app.",[467,468,469,473,476,479,482,485],"ul",{},[470,471,472],"li",{},"Install evlog: pnpm add evlog",[470,474,475],{},"Import initLogger and createRequestLogger from 'evlog'",[470,477,478],{},"Call initLogger({ env: { service: 'my-app' } }) in Astro middleware",[470,480,481],{},"Create a request logger with createRequestLogger({ method, path }) per request",[470,483,484],{},"Use log.set() in API routes and middleware to accumulate context",[470,486,487],{},"Call log.emit() before returning the response (no auto-emit lifecycle)",[450,489,490,491,497,498],{},"Docs: ",[492,493,494],"a",{"href":494,"rel":495},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Fastro",[496],"nofollow","\nAdapters: ",[492,499,500],{"href":500,"rel":501},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[496],[503,504,506,507,510],"callout",{"color":505,"icon":13},"info","This is a guide-level integration. It uses the generic ",[454,508,509],{},"createRequestLogger"," API rather than a framework-specific module.",[503,512,515,561,574],{"color":513,"icon":514},"warning","i-lucide-cloud",[450,516,517,518,521,522,525,526,529,530,532,533,536,537,542,543,548,549,552,553,560],{},"On ",[519,520,222],"strong",{}," (including Astro with ",[454,523,524],{},"@astrojs\u002Fcloudflare","), set ",[454,527,528],{},"waitUntil"," on ",[454,531,509],{}," to your ",[454,534,535],{},"ExecutionContext#waitUntil"," (properly bound), or use ",[492,538,539],{"href":223},[454,540,541],{},"defineWorkerFetch"," \u002F ",[492,544,545],{"href":223},[454,546,547],{},"createWorkersLogger"," with ",[454,550,551],{},"{ executionCtx }"," on a ",[519,554,555,556,559],{},"Worker ",[454,557,558],{},"fetch"," entry",". Otherwise async drains may never finish after the response is returned.",[450,562,563,564,567,568,570,571,573],{},"For Astro ",[519,565,566],{},"middleware"," (not the raw Worker handler), there is no ",[454,569,541],{},"; you still pass ",[454,572,528],{}," from the adapter-exposed context.",[450,575,576,577,580,581,586],{},"The exact way to read ",[454,578,579],{},"ctx"," from Astro middleware depends on your adapter version — check the ",[492,582,585],{"href":583,"rel":584},"https:\u002F\u002Fdocs.astro.build\u002Fen\u002Fguides\u002Fintegrations-guide\u002Fcloudflare\u002F",[496],"Cloudflare adapter docs",".",[588,589,25],"h2",{"id":590},"quick-start",[592,593,595],"h3",{"id":594},"_1-install","1. Install",[597,598,599,624,638,652],"code-group",{},[600,601,607],"pre",{"className":602,"code":603,"filename":604,"language":605,"meta":606,"style":606},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[454,608,609],{"__ignoreMap":606},[610,611,614,617,621],"span",{"class":612,"line":613},"line",1,[610,615,604],{"class":616},"sBMFI",[610,618,620],{"class":619},"sfazB"," add",[610,622,623],{"class":619}," evlog\n",[600,625,628],{"className":602,"code":626,"filename":627,"language":605,"meta":606,"style":606},"bun add evlog\n","bun",[454,629,630],{"__ignoreMap":606},[610,631,632,634,636],{"class":612,"line":613},[610,633,627],{"class":616},[610,635,620],{"class":619},[610,637,623],{"class":619},[600,639,642],{"className":602,"code":640,"filename":641,"language":605,"meta":606,"style":606},"yarn add evlog\n","yarn",[454,643,644],{"__ignoreMap":606},[610,645,646,648,650],{"class":612,"line":613},[610,647,641],{"class":616},[610,649,620],{"class":619},[610,651,623],{"class":619},[600,653,656],{"className":602,"code":654,"filename":655,"language":605,"meta":606,"style":606},"npm install evlog\n","npm",[454,657,658],{"__ignoreMap":606},[610,659,660,662,665],{"class":612,"line":613},[610,661,655],{"class":616},[610,663,664],{"class":619}," install",[610,666,623],{"class":619},[592,668,670],{"id":669},"_2-create-a-middleware","2. Create a middleware",[600,672,677],{"className":673,"code":674,"filename":675,"language":676,"meta":606,"style":606},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineMiddleware } from 'astro:middleware'\nimport { initLogger, createRequestLogger } from 'evlog'\n\ninitLogger({\n  env: { service: 'my-astro-app' },\n})\n\nexport const onRequest = defineMiddleware(async ({ request, locals }, next) => {\n  const url = new URL(request.url)\n\n  const log = createRequestLogger({\n    method: request.method,\n    path: url.pathname,\n  })\n\n  locals.log = log\n\n  try {\n    const response = await next()\n    log.emit()\n    return response\n  } catch (error) {\n    log.error(error instanceof Error ? error : new Error(String(error)))\n    log.emit()\n    throw error\n  }\n})\n","src\u002Fmiddleware.ts","typescript",[454,678,679,708,734,741,754,782,791,796,846,876,881,897,915,932,940,945,961,966,974,993,1006,1015,1034,1078,1089,1098,1104],{"__ignoreMap":606},[610,680,681,685,689,693,696,699,702,705],{"class":612,"line":613},[610,682,684],{"class":683},"s7zQu","import",[610,686,688],{"class":687},"sMK4o"," {",[610,690,692],{"class":691},"sTEyZ"," defineMiddleware",[610,694,695],{"class":687}," }",[610,697,698],{"class":683}," from",[610,700,701],{"class":687}," '",[610,703,704],{"class":619},"astro:middleware",[610,706,707],{"class":687},"'\n",[610,709,711,713,715,718,721,724,726,728,730,732],{"class":612,"line":710},2,[610,712,684],{"class":683},[610,714,688],{"class":687},[610,716,717],{"class":691}," initLogger",[610,719,720],{"class":687},",",[610,722,723],{"class":691}," createRequestLogger",[610,725,695],{"class":687},[610,727,698],{"class":683},[610,729,701],{"class":687},[610,731,456],{"class":619},[610,733,707],{"class":687},[610,735,737],{"class":612,"line":736},3,[610,738,740],{"emptyLinePlaceholder":739},true,"\n",[610,742,744,748,751],{"class":612,"line":743},4,[610,745,747],{"class":746},"s2Zo4","initLogger",[610,749,750],{"class":691},"(",[610,752,753],{"class":687},"{\n",[610,755,757,761,764,766,769,771,773,776,779],{"class":612,"line":756},5,[610,758,760],{"class":759},"swJcz","  env",[610,762,763],{"class":687},":",[610,765,688],{"class":687},[610,767,768],{"class":759}," service",[610,770,763],{"class":687},[610,772,701],{"class":687},[610,774,775],{"class":619},"my-astro-app",[610,777,778],{"class":687},"'",[610,780,781],{"class":687}," },\n",[610,783,785,788],{"class":612,"line":784},6,[610,786,787],{"class":687},"}",[610,789,790],{"class":691},")\n",[610,792,794],{"class":612,"line":793},7,[610,795,740],{"emptyLinePlaceholder":739},[610,797,799,802,806,809,812,814,816,819,822,826,828,831,834,837,840,843],{"class":612,"line":798},8,[610,800,801],{"class":683},"export",[610,803,805],{"class":804},"spNyl"," const",[610,807,808],{"class":691}," onRequest ",[610,810,811],{"class":687},"=",[610,813,692],{"class":746},[610,815,750],{"class":691},[610,817,818],{"class":804},"async",[610,820,821],{"class":687}," ({",[610,823,825],{"class":824},"sHdIc"," request",[610,827,720],{"class":687},[610,829,830],{"class":824}," locals",[610,832,833],{"class":687}," },",[610,835,836],{"class":824}," next",[610,838,839],{"class":687},")",[610,841,842],{"class":804}," =>",[610,844,845],{"class":687}," {\n",[610,847,849,852,855,858,861,864,866,869,871,874],{"class":612,"line":848},9,[610,850,851],{"class":804},"  const",[610,853,854],{"class":691}," url",[610,856,857],{"class":687}," =",[610,859,860],{"class":687}," new",[610,862,863],{"class":746}," URL",[610,865,750],{"class":759},[610,867,868],{"class":691},"request",[610,870,586],{"class":687},[610,872,873],{"class":691},"url",[610,875,790],{"class":759},[610,877,879],{"class":612,"line":878},10,[610,880,740],{"emptyLinePlaceholder":739},[610,882,884,886,889,891,893,895],{"class":612,"line":883},11,[610,885,851],{"class":804},[610,887,888],{"class":691}," log",[610,890,857],{"class":687},[610,892,723],{"class":746},[610,894,750],{"class":759},[610,896,753],{"class":687},[610,898,900,903,905,907,909,912],{"class":612,"line":899},12,[610,901,902],{"class":759},"    method",[610,904,763],{"class":687},[610,906,825],{"class":691},[610,908,586],{"class":687},[610,910,911],{"class":691},"method",[610,913,914],{"class":687},",\n",[610,916,918,921,923,925,927,930],{"class":612,"line":917},13,[610,919,920],{"class":759},"    path",[610,922,763],{"class":687},[610,924,854],{"class":691},[610,926,586],{"class":687},[610,928,929],{"class":691},"pathname",[610,931,914],{"class":687},[610,933,935,938],{"class":612,"line":934},14,[610,936,937],{"class":687},"  }",[610,939,790],{"class":759},[610,941,943],{"class":612,"line":942},15,[610,944,740],{"emptyLinePlaceholder":739},[610,946,948,951,953,956,958],{"class":612,"line":947},16,[610,949,950],{"class":691},"  locals",[610,952,586],{"class":687},[610,954,955],{"class":691},"log",[610,957,857],{"class":687},[610,959,960],{"class":691}," log\n",[610,962,964],{"class":612,"line":963},17,[610,965,740],{"emptyLinePlaceholder":739},[610,967,969,972],{"class":612,"line":968},18,[610,970,971],{"class":683},"  try",[610,973,845],{"class":687},[610,975,977,980,983,985,988,990],{"class":612,"line":976},19,[610,978,979],{"class":804},"    const",[610,981,982],{"class":691}," response",[610,984,857],{"class":687},[610,986,987],{"class":683}," await",[610,989,836],{"class":746},[610,991,992],{"class":759},"()\n",[610,994,996,999,1001,1004],{"class":612,"line":995},20,[610,997,998],{"class":691},"    log",[610,1000,586],{"class":687},[610,1002,1003],{"class":746},"emit",[610,1005,992],{"class":759},[610,1007,1009,1012],{"class":612,"line":1008},21,[610,1010,1011],{"class":683},"    return",[610,1013,1014],{"class":691}," response\n",[610,1016,1018,1020,1023,1026,1029,1032],{"class":612,"line":1017},22,[610,1019,937],{"class":687},[610,1021,1022],{"class":683}," catch",[610,1024,1025],{"class":759}," (",[610,1027,1028],{"class":691},"error",[610,1030,1031],{"class":759},") ",[610,1033,753],{"class":687},[610,1035,1037,1039,1041,1043,1045,1047,1050,1053,1056,1059,1062,1064,1066,1068,1071,1073,1075],{"class":612,"line":1036},23,[610,1038,998],{"class":691},[610,1040,586],{"class":687},[610,1042,1028],{"class":746},[610,1044,750],{"class":759},[610,1046,1028],{"class":691},[610,1048,1049],{"class":687}," instanceof",[610,1051,1052],{"class":616}," Error",[610,1054,1055],{"class":687}," ?",[610,1057,1058],{"class":691}," error",[610,1060,1061],{"class":687}," :",[610,1063,860],{"class":687},[610,1065,1052],{"class":746},[610,1067,750],{"class":759},[610,1069,1070],{"class":746},"String",[610,1072,750],{"class":759},[610,1074,1028],{"class":691},[610,1076,1077],{"class":759},")))\n",[610,1079,1081,1083,1085,1087],{"class":612,"line":1080},24,[610,1082,998],{"class":691},[610,1084,586],{"class":687},[610,1086,1003],{"class":746},[610,1088,992],{"class":759},[610,1090,1092,1095],{"class":612,"line":1091},25,[610,1093,1094],{"class":683},"    throw",[610,1096,1097],{"class":691}," error\n",[610,1099,1101],{"class":612,"line":1100},26,[610,1102,1103],{"class":687},"  }\n",[610,1105,1107,1109],{"class":612,"line":1106},27,[610,1108,787],{"class":687},[610,1110,790],{"class":691},[592,1112,1114],{"id":1113},"_3-type-your-locals","3. Type your locals",[600,1116,1119],{"className":673,"code":1117,"filename":1118,"language":676,"meta":606,"style":606},"\u002F\u002F\u002F \u003Creference types=\"astro\u002Fclient\" \u002F>\n\nimport type { RequestLogger } from 'evlog'\n\ndeclare namespace App {\n  interface Locals {\n    log: RequestLogger\n  }\n}\n","src\u002Fenv.d.ts",[454,1120,1121,1152,1156,1178,1182,1195,1205,1214,1218],{"__ignoreMap":606},[610,1122,1123,1127,1130,1134,1138,1140,1143,1147,1149],{"class":612,"line":613},[610,1124,1126],{"class":1125},"sHwdD","\u002F\u002F\u002F ",[610,1128,1129],{"class":683},"\u003C",[610,1131,1133],{"class":1132},"s5tWE","reference",[610,1135,1137],{"class":1136},"s6hCs"," types",[610,1139,811],{"class":683},[610,1141,1142],{"class":683},"\"",[610,1144,1146],{"class":1145},"smbvS","astro\u002Fclient",[610,1148,1142],{"class":683},[610,1150,1151],{"class":683}," \u002F>\n",[610,1153,1154],{"class":612,"line":710},[610,1155,740],{"emptyLinePlaceholder":739},[610,1157,1158,1160,1163,1165,1168,1170,1172,1174,1176],{"class":612,"line":736},[610,1159,684],{"class":683},[610,1161,1162],{"class":683}," type",[610,1164,688],{"class":687},[610,1166,1167],{"class":691}," RequestLogger",[610,1169,695],{"class":687},[610,1171,698],{"class":683},[610,1173,701],{"class":687},[610,1175,456],{"class":619},[610,1177,707],{"class":687},[610,1179,1180],{"class":612,"line":743},[610,1181,740],{"emptyLinePlaceholder":739},[610,1183,1184,1187,1190,1193],{"class":612,"line":756},[610,1185,1186],{"class":804},"declare",[610,1188,1189],{"class":804}," namespace",[610,1191,1192],{"class":616}," App",[610,1194,845],{"class":687},[610,1196,1197,1200,1203],{"class":612,"line":784},[610,1198,1199],{"class":804},"  interface",[610,1201,1202],{"class":616}," Locals",[610,1204,845],{"class":687},[610,1206,1207,1209,1211],{"class":612,"line":793},[610,1208,998],{"class":759},[610,1210,763],{"class":687},[610,1212,1213],{"class":616}," RequestLogger\n",[610,1215,1216],{"class":612,"line":798},[610,1217,1103],{"class":687},[610,1219,1220],{"class":612,"line":848},[610,1221,1222],{"class":687},"}\n",[588,1224,46],{"id":1225},"wide-events",[450,1227,1228,1229,1232],{},"Access the logger from ",[454,1230,1231],{},"Astro.locals"," in your pages and API routes:",[600,1234,1237],{"className":673,"code":1235,"filename":1236,"language":676,"meta":606,"style":606},"import type { APIRoute } from 'astro'\n\nexport const GET: APIRoute = async ({ params, locals }) => {\n  locals.log.set({ user: { id: params.id } })\n\n  const user = await db.findUser(params.id)\n  locals.log.set({ user: { name: user.name, plan: user.plan } })\n\n  return new Response(JSON.stringify(user), {\n    headers: { 'Content-Type': 'application\u002Fjson' },\n  })\n}\n","src\u002Fpages\u002Fapi\u002Fusers\u002F[id].ts",[454,1238,1239,1261,1265,1299,1342,1346,1375,1429,1433,1464,1491,1497],{"__ignoreMap":606},[610,1240,1241,1243,1245,1247,1250,1252,1254,1256,1259],{"class":612,"line":613},[610,1242,684],{"class":683},[610,1244,1162],{"class":683},[610,1246,688],{"class":687},[610,1248,1249],{"class":691}," APIRoute",[610,1251,695],{"class":687},[610,1253,698],{"class":683},[610,1255,701],{"class":687},[610,1257,1258],{"class":619},"astro",[610,1260,707],{"class":687},[610,1262,1263],{"class":612,"line":710},[610,1264,740],{"emptyLinePlaceholder":739},[610,1266,1267,1269,1271,1274,1276,1278,1280,1283,1285,1288,1290,1292,1295,1297],{"class":612,"line":736},[610,1268,801],{"class":683},[610,1270,805],{"class":804},[610,1272,1273],{"class":691}," GET",[610,1275,763],{"class":687},[610,1277,1249],{"class":616},[610,1279,857],{"class":687},[610,1281,1282],{"class":804}," async",[610,1284,821],{"class":687},[610,1286,1287],{"class":824}," params",[610,1289,720],{"class":687},[610,1291,830],{"class":824},[610,1293,1294],{"class":687}," })",[610,1296,842],{"class":804},[610,1298,845],{"class":687},[610,1300,1301,1303,1305,1307,1309,1312,1314,1317,1320,1322,1324,1327,1329,1331,1333,1336,1338,1340],{"class":612,"line":743},[610,1302,950],{"class":691},[610,1304,586],{"class":687},[610,1306,955],{"class":691},[610,1308,586],{"class":687},[610,1310,1311],{"class":746},"set",[610,1313,750],{"class":759},[610,1315,1316],{"class":687},"{",[610,1318,1319],{"class":759}," user",[610,1321,763],{"class":687},[610,1323,688],{"class":687},[610,1325,1326],{"class":759}," id",[610,1328,763],{"class":687},[610,1330,1287],{"class":691},[610,1332,586],{"class":687},[610,1334,1335],{"class":691},"id",[610,1337,695],{"class":687},[610,1339,695],{"class":687},[610,1341,790],{"class":759},[610,1343,1344],{"class":612,"line":756},[610,1345,740],{"emptyLinePlaceholder":739},[610,1347,1348,1350,1352,1354,1356,1359,1361,1364,1366,1369,1371,1373],{"class":612,"line":784},[610,1349,851],{"class":804},[610,1351,1319],{"class":691},[610,1353,857],{"class":687},[610,1355,987],{"class":683},[610,1357,1358],{"class":691}," db",[610,1360,586],{"class":687},[610,1362,1363],{"class":746},"findUser",[610,1365,750],{"class":759},[610,1367,1368],{"class":691},"params",[610,1370,586],{"class":687},[610,1372,1335],{"class":691},[610,1374,790],{"class":759},[610,1376,1377,1379,1381,1383,1385,1387,1389,1391,1393,1395,1397,1400,1402,1404,1406,1409,1411,1414,1416,1418,1420,1423,1425,1427],{"class":612,"line":793},[610,1378,950],{"class":691},[610,1380,586],{"class":687},[610,1382,955],{"class":691},[610,1384,586],{"class":687},[610,1386,1311],{"class":746},[610,1388,750],{"class":759},[610,1390,1316],{"class":687},[610,1392,1319],{"class":759},[610,1394,763],{"class":687},[610,1396,688],{"class":687},[610,1398,1399],{"class":759}," name",[610,1401,763],{"class":687},[610,1403,1319],{"class":691},[610,1405,586],{"class":687},[610,1407,1408],{"class":691},"name",[610,1410,720],{"class":687},[610,1412,1413],{"class":759}," plan",[610,1415,763],{"class":687},[610,1417,1319],{"class":691},[610,1419,586],{"class":687},[610,1421,1422],{"class":691},"plan",[610,1424,695],{"class":687},[610,1426,695],{"class":687},[610,1428,790],{"class":759},[610,1430,1431],{"class":612,"line":798},[610,1432,740],{"emptyLinePlaceholder":739},[610,1434,1435,1438,1440,1443,1445,1448,1450,1453,1455,1458,1460,1462],{"class":612,"line":848},[610,1436,1437],{"class":683},"  return",[610,1439,860],{"class":687},[610,1441,1442],{"class":746}," Response",[610,1444,750],{"class":759},[610,1446,1447],{"class":691},"JSON",[610,1449,586],{"class":687},[610,1451,1452],{"class":746},"stringify",[610,1454,750],{"class":759},[610,1456,1457],{"class":691},"user",[610,1459,839],{"class":759},[610,1461,720],{"class":687},[610,1463,845],{"class":687},[610,1465,1466,1469,1471,1473,1475,1478,1480,1482,1484,1487,1489],{"class":612,"line":878},[610,1467,1468],{"class":759},"    headers",[610,1470,763],{"class":687},[610,1472,688],{"class":687},[610,1474,701],{"class":687},[610,1476,1477],{"class":759},"Content-Type",[610,1479,778],{"class":687},[610,1481,763],{"class":687},[610,1483,701],{"class":687},[610,1485,1486],{"class":619},"application\u002Fjson",[610,1488,778],{"class":687},[610,1490,781],{"class":687},[610,1492,1493,1495],{"class":612,"line":883},[610,1494,937],{"class":687},[610,1496,790],{"class":759},[610,1498,1499],{"class":612,"line":899},[610,1500,1222],{"class":687},[600,1502,1505],{"className":602,"code":1503,"filename":1504,"language":605,"meta":606,"style":606},"14:58:15 INFO [my-astro-app] GET \u002Fapi\u002Fusers\u002Fusr_123\n  ├─ user: id=usr_123 name=Alice plan=pro\n  └─ requestId: 4a8ff3a8-...\n","Terminal output",[454,1506,1507,1518,1535],{"__ignoreMap":606},[610,1508,1509,1512,1515],{"class":612,"line":613},[610,1510,1511],{"class":616},"14:58:15",[610,1513,1514],{"class":619}," INFO",[610,1516,1517],{"class":691}," [my-astro-app] GET \u002Fapi\u002Fusers\u002Fusr_123\n",[610,1519,1520,1523,1526,1529,1532],{"class":612,"line":710},[610,1521,1522],{"class":616},"  ├─",[610,1524,1525],{"class":619}," user:",[610,1527,1528],{"class":619}," id=usr_123",[610,1530,1531],{"class":619}," name=Alice",[610,1533,1534],{"class":619}," plan=pro\n",[610,1536,1537,1540,1543],{"class":612,"line":736},[610,1538,1539],{"class":616},"  └─",[610,1541,1542],{"class":619}," requestId:",[610,1544,1545],{"class":619}," 4a8ff3a8-...\n",[588,1547,1549],{"id":1548},"error-handling","Error Handling",[450,1551,1552,1553,1556],{},"Use ",[454,1554,1555],{},"createError"," for structured errors:",[600,1558,1561],{"className":673,"code":1559,"filename":1560,"language":676,"meta":606,"style":606},"import type { APIRoute } from 'astro'\nimport { createError, parseError } from 'evlog'\n\nexport const POST: APIRoute = async ({ request, locals }) => {\n  const body = await request.json()\n  locals.log.set({ cart: { items: body.items } })\n\n  if (!body.paymentMethod) {\n    const error = createError({\n      status: 400,\n      message: 'Missing payment method',\n      why: 'No payment method was provided',\n      fix: 'Include a paymentMethod field in the request body',\n    })\n    locals.log.error(error)\n    const parsed = parseError(error)\n    return new Response(JSON.stringify(parsed), { status: parsed.status })\n  }\n\n  return new Response(JSON.stringify({ success: true }))\n}\n","src\u002Fpages\u002Fapi\u002Fcheckout.ts",[454,1562,1563,1583,1607,1611,1642,1662,1703,1707,1729,1743,1756,1772,1788,1804,1811,1830,1847,1890,1894,1898,1932],{"__ignoreMap":606},[610,1564,1565,1567,1569,1571,1573,1575,1577,1579,1581],{"class":612,"line":613},[610,1566,684],{"class":683},[610,1568,1162],{"class":683},[610,1570,688],{"class":687},[610,1572,1249],{"class":691},[610,1574,695],{"class":687},[610,1576,698],{"class":683},[610,1578,701],{"class":687},[610,1580,1258],{"class":619},[610,1582,707],{"class":687},[610,1584,1585,1587,1589,1592,1594,1597,1599,1601,1603,1605],{"class":612,"line":710},[610,1586,684],{"class":683},[610,1588,688],{"class":687},[610,1590,1591],{"class":691}," createError",[610,1593,720],{"class":687},[610,1595,1596],{"class":691}," parseError",[610,1598,695],{"class":687},[610,1600,698],{"class":683},[610,1602,701],{"class":687},[610,1604,456],{"class":619},[610,1606,707],{"class":687},[610,1608,1609],{"class":612,"line":736},[610,1610,740],{"emptyLinePlaceholder":739},[610,1612,1613,1615,1617,1620,1622,1624,1626,1628,1630,1632,1634,1636,1638,1640],{"class":612,"line":743},[610,1614,801],{"class":683},[610,1616,805],{"class":804},[610,1618,1619],{"class":691}," POST",[610,1621,763],{"class":687},[610,1623,1249],{"class":616},[610,1625,857],{"class":687},[610,1627,1282],{"class":804},[610,1629,821],{"class":687},[610,1631,825],{"class":824},[610,1633,720],{"class":687},[610,1635,830],{"class":824},[610,1637,1294],{"class":687},[610,1639,842],{"class":804},[610,1641,845],{"class":687},[610,1643,1644,1646,1649,1651,1653,1655,1657,1660],{"class":612,"line":756},[610,1645,851],{"class":804},[610,1647,1648],{"class":691}," body",[610,1650,857],{"class":687},[610,1652,987],{"class":683},[610,1654,825],{"class":691},[610,1656,586],{"class":687},[610,1658,1659],{"class":746},"json",[610,1661,992],{"class":759},[610,1663,1664,1666,1668,1670,1672,1674,1676,1678,1681,1683,1685,1688,1690,1692,1694,1697,1699,1701],{"class":612,"line":784},[610,1665,950],{"class":691},[610,1667,586],{"class":687},[610,1669,955],{"class":691},[610,1671,586],{"class":687},[610,1673,1311],{"class":746},[610,1675,750],{"class":759},[610,1677,1316],{"class":687},[610,1679,1680],{"class":759}," cart",[610,1682,763],{"class":687},[610,1684,688],{"class":687},[610,1686,1687],{"class":759}," items",[610,1689,763],{"class":687},[610,1691,1648],{"class":691},[610,1693,586],{"class":687},[610,1695,1696],{"class":691},"items",[610,1698,695],{"class":687},[610,1700,695],{"class":687},[610,1702,790],{"class":759},[610,1704,1705],{"class":612,"line":793},[610,1706,740],{"emptyLinePlaceholder":739},[610,1708,1709,1712,1714,1717,1720,1722,1725,1727],{"class":612,"line":798},[610,1710,1711],{"class":683},"  if",[610,1713,1025],{"class":759},[610,1715,1716],{"class":687},"!",[610,1718,1719],{"class":691},"body",[610,1721,586],{"class":687},[610,1723,1724],{"class":691},"paymentMethod",[610,1726,1031],{"class":759},[610,1728,753],{"class":687},[610,1730,1731,1733,1735,1737,1739,1741],{"class":612,"line":848},[610,1732,979],{"class":804},[610,1734,1058],{"class":691},[610,1736,857],{"class":687},[610,1738,1591],{"class":746},[610,1740,750],{"class":759},[610,1742,753],{"class":687},[610,1744,1745,1748,1750,1754],{"class":612,"line":878},[610,1746,1747],{"class":759},"      status",[610,1749,763],{"class":687},[610,1751,1753],{"class":1752},"sbssI"," 400",[610,1755,914],{"class":687},[610,1757,1758,1761,1763,1765,1768,1770],{"class":612,"line":883},[610,1759,1760],{"class":759},"      message",[610,1762,763],{"class":687},[610,1764,701],{"class":687},[610,1766,1767],{"class":619},"Missing payment method",[610,1769,778],{"class":687},[610,1771,914],{"class":687},[610,1773,1774,1777,1779,1781,1784,1786],{"class":612,"line":899},[610,1775,1776],{"class":759},"      why",[610,1778,763],{"class":687},[610,1780,701],{"class":687},[610,1782,1783],{"class":619},"No payment method was provided",[610,1785,778],{"class":687},[610,1787,914],{"class":687},[610,1789,1790,1793,1795,1797,1800,1802],{"class":612,"line":917},[610,1791,1792],{"class":759},"      fix",[610,1794,763],{"class":687},[610,1796,701],{"class":687},[610,1798,1799],{"class":619},"Include a paymentMethod field in the request body",[610,1801,778],{"class":687},[610,1803,914],{"class":687},[610,1805,1806,1809],{"class":612,"line":934},[610,1807,1808],{"class":687},"    }",[610,1810,790],{"class":759},[610,1812,1813,1816,1818,1820,1822,1824,1826,1828],{"class":612,"line":942},[610,1814,1815],{"class":691},"    locals",[610,1817,586],{"class":687},[610,1819,955],{"class":691},[610,1821,586],{"class":687},[610,1823,1028],{"class":746},[610,1825,750],{"class":759},[610,1827,1028],{"class":691},[610,1829,790],{"class":759},[610,1831,1832,1834,1837,1839,1841,1843,1845],{"class":612,"line":947},[610,1833,979],{"class":804},[610,1835,1836],{"class":691}," parsed",[610,1838,857],{"class":687},[610,1840,1596],{"class":746},[610,1842,750],{"class":759},[610,1844,1028],{"class":691},[610,1846,790],{"class":759},[610,1848,1849,1851,1853,1855,1857,1859,1861,1863,1865,1868,1870,1872,1874,1877,1879,1881,1883,1886,1888],{"class":612,"line":963},[610,1850,1011],{"class":683},[610,1852,860],{"class":687},[610,1854,1442],{"class":746},[610,1856,750],{"class":759},[610,1858,1447],{"class":691},[610,1860,586],{"class":687},[610,1862,1452],{"class":746},[610,1864,750],{"class":759},[610,1866,1867],{"class":691},"parsed",[610,1869,839],{"class":759},[610,1871,720],{"class":687},[610,1873,688],{"class":687},[610,1875,1876],{"class":759}," status",[610,1878,763],{"class":687},[610,1880,1836],{"class":691},[610,1882,586],{"class":687},[610,1884,1885],{"class":691},"status",[610,1887,695],{"class":687},[610,1889,790],{"class":759},[610,1891,1892],{"class":612,"line":968},[610,1893,1103],{"class":687},[610,1895,1896],{"class":612,"line":976},[610,1897,740],{"emptyLinePlaceholder":739},[610,1899,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918,1921,1923,1927,1929],{"class":612,"line":995},[610,1901,1437],{"class":683},[610,1903,860],{"class":687},[610,1905,1442],{"class":746},[610,1907,750],{"class":759},[610,1909,1447],{"class":691},[610,1911,586],{"class":687},[610,1913,1452],{"class":746},[610,1915,750],{"class":759},[610,1917,1316],{"class":687},[610,1919,1920],{"class":759}," success",[610,1922,763],{"class":687},[610,1924,1926],{"class":1925},"sfNiH"," true",[610,1928,695],{"class":687},[610,1930,1931],{"class":759},"))\n",[610,1933,1934],{"class":612,"line":1008},[610,1935,1222],{"class":687},[588,1937,419],{"id":1938},"configuration",[450,1940,1941,1942,1945,1946,1948],{},"See the ",[492,1943,1944],{"href":420},"Configuration reference"," for all available options (",[454,1947,747],{},", middleware options, sampling, silent mode, etc.).",[588,1950,1952],{"id":1951},"drain","Drain",[450,1954,1955,1956,1958],{},"Configure drain in ",[454,1957,747],{}," inside your middleware:",[600,1960,1962],{"className":673,"code":1961,"filename":675,"language":676,"meta":606,"style":606},"import { initLogger, createRequestLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport type { DrainContext } from 'evlog'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n})\nconst drain = pipeline(createAxiomDrain())\n\ninitLogger({\n  env: { service: 'my-astro-app' },\n  drain,\n})\n",[454,1963,1964,1986,2006,2026,2047,2051,2075,2104,2110,2130,2134,2142,2162,2169],{"__ignoreMap":606},[610,1965,1966,1968,1970,1972,1974,1976,1978,1980,1982,1984],{"class":612,"line":613},[610,1967,684],{"class":683},[610,1969,688],{"class":687},[610,1971,717],{"class":691},[610,1973,720],{"class":687},[610,1975,723],{"class":691},[610,1977,695],{"class":687},[610,1979,698],{"class":683},[610,1981,701],{"class":687},[610,1983,456],{"class":619},[610,1985,707],{"class":687},[610,1987,1988,1990,1992,1995,1997,1999,2001,2004],{"class":612,"line":710},[610,1989,684],{"class":683},[610,1991,688],{"class":687},[610,1993,1994],{"class":691}," createAxiomDrain",[610,1996,695],{"class":687},[610,1998,698],{"class":683},[610,2000,701],{"class":687},[610,2002,2003],{"class":619},"evlog\u002Faxiom",[610,2005,707],{"class":687},[610,2007,2008,2010,2012,2015,2017,2019,2021,2024],{"class":612,"line":736},[610,2009,684],{"class":683},[610,2011,688],{"class":687},[610,2013,2014],{"class":691}," createDrainPipeline",[610,2016,695],{"class":687},[610,2018,698],{"class":683},[610,2020,701],{"class":687},[610,2022,2023],{"class":619},"evlog\u002Fpipeline",[610,2025,707],{"class":687},[610,2027,2028,2030,2032,2034,2037,2039,2041,2043,2045],{"class":612,"line":743},[610,2029,684],{"class":683},[610,2031,1162],{"class":683},[610,2033,688],{"class":687},[610,2035,2036],{"class":691}," DrainContext",[610,2038,695],{"class":687},[610,2040,698],{"class":683},[610,2042,701],{"class":687},[610,2044,456],{"class":619},[610,2046,707],{"class":687},[610,2048,2049],{"class":612,"line":756},[610,2050,740],{"emptyLinePlaceholder":739},[610,2052,2053,2056,2059,2061,2063,2065,2068,2071,2073],{"class":612,"line":784},[610,2054,2055],{"class":804},"const",[610,2057,2058],{"class":691}," pipeline ",[610,2060,811],{"class":687},[610,2062,2014],{"class":746},[610,2064,1129],{"class":687},[610,2066,2067],{"class":616},"DrainContext",[610,2069,2070],{"class":687},">",[610,2072,750],{"class":691},[610,2074,753],{"class":687},[610,2076,2077,2080,2082,2084,2087,2089,2092,2094,2097,2099,2102],{"class":612,"line":793},[610,2078,2079],{"class":759},"  batch",[610,2081,763],{"class":687},[610,2083,688],{"class":687},[610,2085,2086],{"class":759}," size",[610,2088,763],{"class":687},[610,2090,2091],{"class":1752}," 50",[610,2093,720],{"class":687},[610,2095,2096],{"class":759}," intervalMs",[610,2098,763],{"class":687},[610,2100,2101],{"class":1752}," 5000",[610,2103,781],{"class":687},[610,2105,2106,2108],{"class":612,"line":798},[610,2107,787],{"class":687},[610,2109,790],{"class":691},[610,2111,2112,2114,2117,2119,2122,2124,2127],{"class":612,"line":848},[610,2113,2055],{"class":804},[610,2115,2116],{"class":691}," drain ",[610,2118,811],{"class":687},[610,2120,2121],{"class":746}," pipeline",[610,2123,750],{"class":691},[610,2125,2126],{"class":746},"createAxiomDrain",[610,2128,2129],{"class":691},"())\n",[610,2131,2132],{"class":612,"line":878},[610,2133,740],{"emptyLinePlaceholder":739},[610,2135,2136,2138,2140],{"class":612,"line":883},[610,2137,747],{"class":746},[610,2139,750],{"class":691},[610,2141,753],{"class":687},[610,2143,2144,2146,2148,2150,2152,2154,2156,2158,2160],{"class":612,"line":899},[610,2145,760],{"class":759},[610,2147,763],{"class":687},[610,2149,688],{"class":687},[610,2151,768],{"class":759},[610,2153,763],{"class":687},[610,2155,701],{"class":687},[610,2157,775],{"class":619},[610,2159,778],{"class":687},[610,2161,781],{"class":687},[610,2163,2164,2167],{"class":612,"line":917},[610,2165,2166],{"class":691},"  drain",[610,2168,914],{"class":687},[610,2170,2171,2173],{"class":612,"line":934},[610,2172,787],{"class":687},[610,2174,790],{"class":691},[503,2176,1941,2177,2179],{"color":505,"icon":13},[492,2178,90],{"href":95}," docs for all available drain adapters.",[588,2181,2183],{"id":2182},"next-steps","Next Steps",[467,2185,2186,2191,2196,2201],{},[470,2187,2188,2190],{},[492,2189,46],{"href":47},": Design comprehensive events with context layering",[470,2192,2193,2195],{},[492,2194,90],{"href":95},": Send logs to Axiom, Sentry, PostHog, and more",[470,2197,2198,2200],{},[492,2199,61],{"href":62},": Control log volume with head and tail sampling",[470,2202,2203,2205,2206,2209,2210,2213,2214,2217],{},[492,2204,51],{"href":52},": Throw errors with ",[454,2207,2208],{},"why",", ",[454,2211,2212],{},"fix",", and ",[454,2215,2216],{},"link"," fields",[2219,2220,2221],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s5tWE, html code.shiki .s5tWE{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#F07178;--shiki-default-font-style:italic;--shiki-dark:#F07178;--shiki-dark-font-style:italic}html pre.shiki code .s6hCs, html code.shiki .s6hCs{--shiki-light:#9C3EDA;--shiki-light-font-style:italic;--shiki-default:#C792EA;--shiki-default-font-style:italic;--shiki-dark:#C792EA;--shiki-dark-font-style:italic}html pre.shiki code .smbvS, html code.shiki .smbvS{--shiki-light:#91B859;--shiki-light-font-style:italic;--shiki-default:#C3E88D;--shiki-default-font-style:italic;--shiki-dark:#C3E88D;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":606,"searchDepth":710,"depth":710,"links":2223},[2224,2229,2230,2231,2232,2233],{"id":590,"depth":710,"text":25,"children":2225},[2226,2227,2228],{"id":594,"depth":736,"text":595},{"id":669,"depth":736,"text":670},{"id":1113,"depth":736,"text":1114},{"id":1225,"depth":710,"text":46},{"id":1548,"depth":710,"text":1549},{"id":1938,"depth":710,"text":419},{"id":1951,"depth":710,"text":1952},{"id":2182,"depth":710,"text":2183},"Wide events and structured errors in Astro server middleware.","md",null,{},{"title":231,"icon":234},{"title":231,"description":2234},"HYExefMiyBQ-zZNtAaxkjKWL_3ETIIAt_-haBiR6V6Q",[2242,2244],{"title":227,"path":228,"stem":229,"description":2243,"icon":74,"children":-1},"Use evlog in standalone TypeScript scripts, CLI tools, queues, cron jobs, and any TypeScript process.",{"title":236,"path":237,"stem":238,"description":2245,"icon":239,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in oRPC applications.",1782925727909]