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