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