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