[{"data":1,"prerenderedAt":2336},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-astro":534,"-integrate-frameworks-astro-surround":2331},[4,30,80,128,308,440,499],{"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},"CLI","\u002Fcli","3.cli",[85,88,93,98,103,108,113,118,123],{"title":36,"path":86,"stem":87,"icon":44},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":89,"path":90,"stem":91,"icon":92},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":94,"path":95,"stem":96,"icon":97},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":99,"path":100,"stem":101,"icon":102},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":104,"path":105,"stem":106,"icon":107},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":109,"path":110,"stem":111,"icon":112},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":114,"path":115,"stem":116,"icon":117},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":119,"path":120,"stem":121,"icon":122},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":124,"path":125,"stem":126,"icon":127},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":129,"path":130,"stem":131,"children":132,"page":29},"Integrate","\u002Fintegrate","4.integrate",[133,137,220],{"title":36,"path":134,"stem":135,"icon":136},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[142,145,175,200],{"title":36,"path":143,"stem":144,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":146,"path":147,"stem":148,"children":149,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[150,155,160,165,170],{"title":151,"path":152,"stem":153,"icon":154},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":156,"path":157,"stem":158,"icon":159},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":161,"path":162,"stem":163,"icon":164},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":166,"path":167,"stem":168,"icon":169},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":171,"path":172,"stem":173,"icon":174},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":176,"path":177,"stem":178,"children":179,"page":29},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[180,185,190,195],{"title":181,"path":182,"stem":183,"icon":184},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":186,"path":187,"stem":188,"icon":189},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":191,"path":192,"stem":193,"icon":194},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":196,"path":197,"stem":198,"icon":199},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":201,"path":202,"stem":203,"children":204,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[205,210,215],{"title":206,"path":207,"stem":208,"icon":209},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":211,"path":212,"stem":213,"icon":214},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":216,"path":217,"stem":218,"icon":219},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":221,"path":222,"stem":223,"children":224,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[225,229,234,239,244,249,254,259,264,269,274,279,284,289,293,298,303],{"title":36,"path":226,"stem":227,"icon":228},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":230,"path":231,"stem":232,"icon":233},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":235,"path":236,"stem":237,"icon":238},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":240,"path":241,"stem":242,"icon":243},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":245,"path":246,"stem":247,"icon":248},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":250,"path":251,"stem":252,"icon":253},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":255,"path":256,"stem":257,"icon":258},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":260,"path":261,"stem":262,"icon":263},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":265,"path":266,"stem":267,"icon":268},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":270,"path":271,"stem":272,"icon":273},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":275,"path":276,"stem":277,"icon":278},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":280,"path":281,"stem":282,"icon":283},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":285,"path":286,"stem":287,"icon":288},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":290,"path":291,"stem":292,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":294,"path":295,"stem":296,"icon":297},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":299,"path":300,"stem":301,"icon":302},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":304,"path":305,"stem":306,"icon":307},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":309,"path":310,"stem":311,"children":312,"page":29},"Use Cases","\u002Fuse-cases","5.use-cases",[313,316,321,350,377,409,430,435],{"title":36,"path":314,"stem":315,"icon":102},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":317,"path":318,"stem":319,"icon":320},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":322,"icon":323,"path":324,"stem":325,"children":326,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[327,330,335,340,345],{"title":36,"path":328,"stem":329,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":331,"path":332,"stem":333,"icon":334},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":336,"path":337,"stem":338,"icon":339},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":341,"path":342,"stem":343,"icon":344},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":346,"path":347,"stem":348,"icon":349},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":351,"icon":352,"path":353,"stem":354,"children":355,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[356,359,364,369,373],{"title":36,"path":357,"stem":358,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":360,"path":361,"stem":362,"icon":363},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":365,"path":366,"stem":367,"icon":368},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":370,"path":371,"stem":372,"icon":320},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":374,"path":375,"stem":376,"icon":107},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":378,"icon":379,"path":380,"stem":381,"children":382,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[383,386,391,396,401,405],{"title":36,"path":384,"stem":385,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":387,"path":388,"stem":389,"icon":390},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":392,"path":393,"stem":394,"icon":395},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":397,"path":398,"stem":399,"icon":400},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":402,"path":403,"stem":404,"icon":379},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":406,"path":407,"stem":408,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":346,"icon":107,"path":410,"stem":411,"children":412,"page":29},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[413,416,421,426],{"title":36,"path":414,"stem":415,"icon":39},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":417,"path":418,"stem":419,"icon":420},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":422,"path":423,"stem":424,"icon":425},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":427,"path":428,"stem":429,"icon":79},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":431,"path":432,"stem":433,"icon":434},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":436,"path":437,"stem":438,"icon":439},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":441,"path":442,"stem":443,"children":444,"page":29},"Extend","\u002Fextend","6.extend",[445,449,454,459,463,468,472,476,480,484,489,494],{"title":36,"path":446,"stem":447,"icon":448},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":450,"path":451,"stem":452,"icon":453},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":455,"path":456,"stem":457,"icon":458},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":460,"path":461,"stem":462,"icon":453},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":464,"path":465,"stem":466,"icon":467},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":406,"path":469,"stem":470,"icon":471},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":473,"path":474,"stem":475,"icon":448},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":477,"path":478,"stem":479,"icon":434},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":481,"path":482,"stem":483,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":485,"path":486,"stem":487,"icon":488},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":490,"path":491,"stem":492,"icon":493},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":495,"path":496,"stem":497,"icon":498},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":427,"path":500,"stem":501,"children":502,"page":29},"\u002Freference","7.reference",[503,508,511,516,520,525,529],{"title":504,"path":505,"stem":506,"icon":507},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":374,"path":509,"stem":510,"icon":107},"\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":379},"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":434},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":530,"path":531,"stem":532,"icon":533},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"id":535,"title":294,"body":536,"description":2324,"extension":2325,"links":2326,"meta":2327,"navigation":2328,"path":295,"seo":2329,"stem":296,"__hash__":2330},"docs\u002F4.integrate\u002Fframeworks\u002F14.astro.md",{"type":537,"value":538,"toc":2312},"minimark",[539,548,592,601,677,681,686,757,761,1201,1205,1313,1316,1323,1591,1636,1640,1647,2026,2029,2039,2043,2049,2265,2270,2274,2308],[540,541,542,543,547],"p",{},"Astro doesn't have a dedicated evlog integration. Instead, use the core ",[544,545,546],"code",{},"evlog"," package with Astro's middleware to create request-scoped loggers manually.",[549,550,553,556,578],"prompt",{":actions":551,"description":552,"icon":297},"[\"copy\",\"cursor\",\"claude\"]","Set up evlog in my Astro app",[540,554,555],{},"Set up evlog in my Astro app.",[557,558,559,563,566,569,572,575],"ul",{},[560,561,562],"li",{},"Install evlog: pnpm add evlog",[560,564,565],{},"Import initLogger and createRequestLogger from 'evlog'",[560,567,568],{},"Call initLogger({ env: { service: 'my-app' } }) in Astro middleware",[560,570,571],{},"Create a request logger with createRequestLogger({ method, path }) per request",[560,573,574],{},"Use log.set() in API routes and middleware to accumulate context",[560,576,577],{},"Call log.emit() before returning the response (no auto-emit lifecycle)",[540,579,580,581,587,588],{},"Docs: ",[582,583,584],"a",{"href":584,"rel":585},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Fastro",[586],"nofollow","\nAdapters: ",[582,589,590],{"href":590,"rel":591},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[586],[593,594,596,597,600],"callout",{"color":595,"icon":13},"info","This is a guide-level integration. It uses the generic ",[544,598,599],{},"createRequestLogger"," API rather than a framework-specific module.",[593,602,605,651,664],{"color":603,"icon":604},"warning","i-lucide-cloud",[540,606,607,608,611,612,615,616,619,620,622,623,626,627,632,633,638,639,642,643,650],{},"On ",[609,610,285],"strong",{}," (including Astro with ",[544,613,614],{},"@astrojs\u002Fcloudflare","), set ",[544,617,618],{},"waitUntil"," on ",[544,621,599],{}," to your ",[544,624,625],{},"ExecutionContext#waitUntil"," (properly bound), or use ",[582,628,629],{"href":286},[544,630,631],{},"defineWorkerFetch"," \u002F ",[582,634,635],{"href":286},[544,636,637],{},"createWorkersLogger"," with ",[544,640,641],{},"{ executionCtx }"," on a ",[609,644,645,646,649],{},"Worker ",[544,647,648],{},"fetch"," entry",". Otherwise async drains may never finish after the response is returned.",[540,652,653,654,657,658,660,661,663],{},"For Astro ",[609,655,656],{},"middleware"," (not the raw Worker handler), there is no ",[544,659,631],{},"; you still pass ",[544,662,618],{}," from the adapter-exposed context.",[540,665,666,667,670,671,676],{},"The exact way to read ",[544,668,669],{},"ctx"," from Astro middleware depends on your adapter version — check the ",[582,672,675],{"href":673,"rel":674},"https:\u002F\u002Fdocs.astro.build\u002Fen\u002Fguides\u002Fintegrations-guide\u002Fcloudflare\u002F",[586],"Cloudflare adapter docs",".",[678,679,25],"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","",[544,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",[544,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",[544,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",[544,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",[544,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,546],{"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",[544,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,546],{"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,46],{"id":1315},"wide-events",[540,1317,1318,1319,1322],{},"Access the logger from ",[544,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",[544,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",[544,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",[540,1641,1642,1643,1646],{},"Use ",[544,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",[544,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,546],{"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",[540,2030,2031,2032,2035,2036,2038],{},"See the ",[582,2033,2034],{"href":505},"Configuration reference"," for all available options (",[544,2037,837],{},", middleware options, sampling, silent mode, etc.).",[678,2040,2042],{"id":2041},"drain","Drain",[540,2044,2045,2046,2048],{},"Configure drain in ",[544,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",[544,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,546],{"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,546],{"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},[593,2266,2031,2267,2269],{"color":595,"icon":13},[582,2268,138],{"href":143}," docs for all available drain adapters.",[678,2271,2273],{"id":2272},"next-steps","Next Steps",[557,2275,2276,2281,2286,2291],{},[560,2277,2278,2280],{},[582,2279,46],{"href":47},": Design comprehensive events with context layering",[560,2282,2283,2285],{},[582,2284,138],{"href":143},": Send logs to Axiom, Sentry, PostHog, and more",[560,2287,2288,2290],{},[582,2289,61],{"href":62},": Control log volume with head and tail sampling",[560,2292,2293,2295,2296,2299,2300,2303,2304,2307],{},[582,2294,51],{"href":52},": Throw errors with ",[544,2297,2298],{},"why",", ",[544,2301,2302],{},"fix",", and ",[544,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":25,"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":46},{"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":294,"icon":297},{"title":294,"description":2324},"fFEDC_53ykqwmdEkDlqcEekb-Qhb7JeaGkPbGeS0oBI",[2332,2334],{"title":290,"path":291,"stem":292,"description":2333,"icon":74,"children":-1},"Use evlog in standalone TypeScript scripts, CLI tools, queues, cron jobs, and any TypeScript process.",{"title":299,"path":300,"stem":301,"description":2335,"icon":302,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in oRPC applications.",1786743664296]