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