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