[{"data":1,"prerenderedAt":2231},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-astro":429,"-integrate-frameworks-astro-surround":2226},[4,30,80,235,343,398],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"Integrate","\u002Fintegrate","3.integrate",[85,89,152],{"title":36,"path":86,"stem":87,"icon":88},"\u002Fintegrate\u002Foverview","3.integrate\u002F0.overview","i-lucide-plug",{"title":90,"path":91,"stem":92,"children":93,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","3.integrate\u002Fadapters",[94,97,137],{"title":36,"path":95,"stem":96,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","3.integrate\u002Fadapters\u002F01.overview",{"title":98,"path":99,"stem":100,"children":101,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","3.integrate\u002Fadapters\u002Fcloud",[102,107,112,117,122,127,132],{"title":103,"path":104,"stem":105,"icon":106},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","3.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":108,"path":109,"stem":110,"icon":111},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","3.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":113,"path":114,"stem":115,"icon":116},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","3.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":118,"path":119,"stem":120,"icon":121},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","3.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":123,"path":124,"stem":125,"icon":126},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","3.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":128,"path":129,"stem":130,"icon":131},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","3.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":133,"path":134,"stem":135,"icon":136},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","3.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","3.integrate\u002Fadapters\u002Fself-hosted",[142,147],{"title":143,"path":144,"stem":145,"icon":146},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","3.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":148,"path":149,"stem":150,"icon":151},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","3.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":153,"path":154,"stem":155,"children":156,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[157,161,166,171,176,181,186,191,196,201,206,211,216,221,225,230],{"title":36,"path":158,"stem":159,"icon":160},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":162,"path":163,"stem":164,"icon":165},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":167,"path":168,"stem":169,"icon":170},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":172,"path":173,"stem":174,"icon":175},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":177,"path":178,"stem":179,"icon":180},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":182,"path":183,"stem":184,"icon":185},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":187,"path":188,"stem":189,"icon":190},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":192,"path":193,"stem":194,"icon":195},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":197,"path":198,"stem":199,"icon":200},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":202,"path":203,"stem":204,"icon":205},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":207,"path":208,"stem":209,"icon":210},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":212,"path":213,"stem":214,"icon":215},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":217,"path":218,"stem":219,"icon":220},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":222,"path":223,"stem":224,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":226,"path":227,"stem":228,"icon":229},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":231,"path":232,"stem":233,"icon":234},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":236,"path":237,"stem":238,"children":239,"page":29},"Use Cases","\u002Fuse-cases","4.use-cases",[240,244,249,278,306,338],{"title":36,"path":241,"stem":242,"icon":243},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":245,"path":246,"stem":247,"icon":248},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":250,"icon":251,"path":252,"stem":253,"children":254,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[255,258,263,268,273],{"title":36,"path":256,"stem":257,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":259,"path":260,"stem":261,"icon":262},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":264,"path":265,"stem":266,"icon":267},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":269,"path":270,"stem":271,"icon":272},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":274,"path":275,"stem":276,"icon":277},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":279,"icon":280,"path":281,"stem":282,"children":283,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[284,287,292,297,301],{"title":36,"path":285,"stem":286,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":288,"path":289,"stem":290,"icon":291},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":293,"path":294,"stem":295,"icon":296},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":298,"path":299,"stem":300,"icon":248},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":302,"path":303,"stem":304,"icon":305},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":307,"icon":308,"path":309,"stem":310,"children":311,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[312,315,320,325,330,334],{"title":36,"path":313,"stem":314,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":316,"path":317,"stem":318,"icon":319},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":321,"path":322,"stem":323,"icon":324},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":326,"path":327,"stem":328,"icon":329},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":331,"path":332,"stem":333,"icon":308},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":335,"path":336,"stem":337,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":339,"path":340,"stem":341,"icon":342},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":344,"path":345,"stem":346,"children":347,"page":29},"Extend","\u002Fextend","5.extend",[348,352,357,362,367,371,375,379,383,388,393],{"title":36,"path":349,"stem":350,"icon":351},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":353,"path":354,"stem":355,"icon":356},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":358,"path":359,"stem":360,"icon":361},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":363,"path":364,"stem":365,"icon":366},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":335,"path":368,"stem":369,"icon":370},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":372,"path":373,"stem":374,"icon":351},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":376,"path":377,"stem":378,"icon":342},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":380,"path":381,"stem":382,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":384,"path":385,"stem":386,"icon":387},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":389,"path":390,"stem":391,"icon":392},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":394,"path":395,"stem":396,"icon":397},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":399,"path":400,"stem":401,"children":402,"page":29},"Reference","\u002Freference","6.reference",[403,408,411,416,420,425],{"title":404,"path":405,"stem":406,"icon":407},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":302,"path":409,"stem":410,"icon":305},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":412,"path":413,"stem":414,"icon":415},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":417,"path":418,"stem":419,"icon":308},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":421,"path":422,"stem":423,"icon":424},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":426,"path":427,"stem":428,"icon":342},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":430,"title":226,"body":431,"description":2219,"extension":2220,"links":2221,"meta":2222,"navigation":2223,"path":227,"seo":2224,"stem":228,"__hash__":2225},"docs\u002F3.integrate\u002Fframeworks\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":229},"[\"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\u002Fintegrate\u002Fframeworks\u002Fastro",[481],"nofollow","\nAdapters: ",[477,484,485],{"href":485,"rel":486},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[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,217],"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":218},[439,525,526],{},"defineWorkerFetch"," \u002F ",[477,529,530],{"href":218},[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,25],"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,46],{"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,404],{"id":1923},"configuration",[435,1925,1926,1927,1930,1931,1933],{},"See the ",[477,1928,1929],{"href":405},"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,90],{"href":95}," 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,46],{"href":47},": Design comprehensive events with context layering",[455,2177,2178,2180],{},[477,2179,90],{"href":95},": Send logs to Axiom, Sentry, PostHog, and more",[455,2182,2183,2185],{},[477,2184,61],{"href":62},": Control log volume with head and tail sampling",[455,2187,2188,2190,2191,2194,2195,2198,2199,2202],{},[477,2189,51],{"href":52},": 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":25,"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":46},{"id":1533,"depth":695,"text":1534},{"id":1923,"depth":695,"text":404},{"id":1936,"depth":695,"text":1937},{"id":2167,"depth":695,"text":2168},"Wide events and structured errors in Astro server middleware.","md",null,{},{"title":226,"icon":229},{"title":226,"description":2219},"HYExefMiyBQ-zZNtAaxkjKWL_3ETIIAt_-haBiR6V6Q",[2227,2229],{"title":222,"path":223,"stem":224,"description":2228,"icon":74,"children":-1},"Use evlog in standalone TypeScript scripts, CLI tools, queues, cron jobs, and any TypeScript process.",{"title":231,"path":232,"stem":233,"description":2230,"icon":234,"children":-1},"Wide events and structured logging in AWS Lambda functions, including SQS consumers and event-driven handlers.",1778440156813]