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