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