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