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