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