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