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