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