[{"data":1,"prerenderedAt":2903},["ShallowReactive",2],{"navigation_docs":3,"-learn-lifecycle":602,"-learn-lifecycle-surround":2898},[4,35,85,138,318,479,538,577],{"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,453],{"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,"icon":455,"path":456,"stem":457,"children":458,"page":34},"Signals","i-lucide-scan-search","\u002Fuse-cases\u002Fsignals","5.use-cases\u002F7.signals",[459,462,467,472,475],{"title":41,"path":460,"stem":461,"icon":44},"\u002Fuse-cases\u002Fsignals\u002Foverview","5.use-cases\u002F7.signals\u002F01.overview",{"title":463,"path":464,"stem":465,"icon":466},"What You Can Ask","\u002Fuse-cases\u002Fsignals\u002Fask","5.use-cases\u002F7.signals\u002F02.ask","i-lucide-message-circle-question",{"title":468,"path":469,"stem":470,"icon":471},"What It Costs","\u002Fuse-cases\u002Fsignals\u002Fcost","5.use-cases\u002F7.signals\u002F03.cost","i-lucide-coins",{"title":436,"path":473,"stem":474,"icon":84},"\u002Fuse-cases\u002Fsignals\u002Freference","5.use-cases\u002F7.signals\u002F04.reference",{"title":415,"path":476,"stem":477,"icon":478},"\u002Fuse-cases\u002Fsignals\u002Frecipes","5.use-cases\u002F7.signals\u002F05.recipes","i-lucide-lightbulb",{"title":480,"path":481,"stem":482,"children":483,"page":34},"Extend","\u002Fextend","6.extend",[484,488,493,498,502,507,511,515,519,523,528,533],{"title":41,"path":485,"stem":486,"icon":487},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":489,"path":490,"stem":491,"icon":492},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":494,"path":495,"stem":496,"icon":497},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":499,"path":500,"stem":501,"icon":492},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":503,"path":504,"stem":505,"icon":506},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":415,"path":508,"stem":509,"icon":510},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":512,"path":513,"stem":514,"icon":487},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":516,"path":517,"stem":518,"icon":443},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":520,"path":521,"stem":522,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":524,"path":525,"stem":526,"icon":527},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":529,"path":530,"stem":531,"icon":532},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":534,"path":535,"stem":536,"icon":537},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":436,"path":539,"stem":540,"children":541,"page":34},"\u002Freference","7.reference",[542,546,551,554,559,563,568,572],{"title":41,"path":543,"stem":544,"icon":545},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":547,"path":548,"stem":549,"icon":550},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":383,"path":552,"stem":553,"icon":112},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":555,"path":556,"stem":557,"icon":558},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":560,"path":561,"stem":562,"icon":388},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":564,"path":565,"stem":566,"icon":567},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":569,"path":570,"stem":571,"icon":443},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":573,"path":574,"stem":575,"icon":576},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":578,"path":579,"stem":580,"children":581,"page":34},"Compare","\u002Fcompare","8.compare",[582,586,590,594,598],{"title":583,"path":584,"stem":585,"icon":567},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":587,"path":588,"stem":589,"icon":204},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":591,"path":592,"stem":593,"icon":567},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":595,"path":596,"stem":597,"icon":567},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":599,"path":600,"stem":601,"icon":567},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":603,"title":61,"body":604,"description":2887,"extension":2888,"links":2889,"meta":2894,"navigation":2895,"path":62,"seo":2896,"stem":63,"__hash__":2897},"docs\u002F2.learn\u002F4.lifecycle.md",{"type":605,"value":606,"toc":2865},"minimark",[607,611,614,619,764,802,806,809,814,824,830,939,943,950,1019,1025,1029,1035,1250,1256,1260,1263,1303,1306,1313,1325,1433,1439,1571,1581,1585,1588,1595,1664,1687,1690,1694,1700,1951,1954,1961,1964,2044,2200,2207,2215,2222,2232,2315,2322,2326,2391,2395,2402,2513,2517,2523,2556,2566,2570,2577,2625,2835,2839,2861],[608,609,610],"p",{},"evlog events follow a pipeline from creation to delivery. The pipeline differs slightly depending on which logging mode you use, but the core stages (emit, sample, enrich, drain) are shared.",[612,613],"lifecycle-flow",{},[615,616,618],"h2",{"id":617},"follow-an-event-through-each-mode","Follow an event through each mode",[620,621,622,651],"table",{},[623,624,625],"thead",{},[626,627,628,632,639,648],"tr",{},[629,630,631],"th",{},"Stage",[629,633,634,638],{},[635,636,637],"code",{},"log"," (simple)",[629,640,641,644,645],{},[635,642,643],{},"createLogger"," \u002F ",[635,646,647],{},"createRequestLogger",[629,649,650],{},"Framework middleware",[652,653,654,678,702,721,736,751],"tbody",{},[626,655,656,663,666,675],{},[657,658,659],"td",{},[660,661,662],"strong",{},"Create",[657,664,665],{},"Implicit per call",[657,667,668,671,672],{},[635,669,670],{},"createLogger({...})"," or ",[635,673,674],{},"createRequestLogger({...})",[657,676,677],{},"Auto on request start",[626,679,680,685,688,694],{},[657,681,682],{},[660,683,684],{},"Accumulate",[657,686,687],{},"N\u002FA (single call)",[657,689,690,693],{},[635,691,692],{},"log.set()"," multiple times",[657,695,696,698,699],{},[635,697,692],{}," via ",[635,700,701],{},"useLogger(event)",[626,703,704,709,712,718],{},[657,705,706],{},[660,707,708],{},"Emit",[657,710,711],{},"Immediate",[657,713,714,715],{},"Manual ",[635,716,717],{},"log.emit()",[657,719,720],{},"Auto on response end",[626,722,723,728,731,734],{},[657,724,725],{},[660,726,727],{},"Sample",[657,729,730],{},"Head sampling only",[657,732,733],{},"Head + tail sampling",[657,735,733],{},[626,737,738,743,746,748],{},[657,739,740],{},[660,741,742],{},"Enrich",[657,744,745],{},"Via global drain",[657,747,745],{},[657,749,750],{},"Via hooks or callbacks",[626,752,753,758,760,762],{},[657,754,755],{},[660,756,757],{},"Drain",[657,759,745],{},[657,761,745],{},[657,763,750],{},[608,765,766,767,772,773,776,777,644,780,644,783,644,786,789,790,795,796,801],{},"After ",[660,768,769],{},[635,770,771],{},"emit"," (including when sampling returns no output), the request logger is ",[660,774,775],{},"sealed",": later ",[635,778,779],{},"set",[635,781,782],{},"error",[635,784,785],{},"info",[635,787,788],{},"warn"," calls are ignored with a console warning. For background work that needs its own event, use ",[660,791,792],{},[635,793,794],{},"log.fork()"," where your integration supports it. See ",[797,798,800],"a",{"href":799},"\u002Flearn\u002Fwide-events#after-emit-sealing-and-background-work","After emit"," in Wide events.",[615,803,805],{"id":804},"trace-a-request-step-by-step","Trace a request, step by step",[608,807,808],{},"For framework-managed request logging, every request walks the pipeline above. Each stage is detailed below.",[810,811,813],"h3",{"id":812},"_1-route-filtering","1. Route Filtering",[608,815,816,817,644,820,823],{},"When a request arrives, evlog checks whether the path matches the configured ",[635,818,819],{},"include",[635,821,822],{},"exclude"," patterns. If the route is excluded, no logger is created and the request proceeds without any logging overhead.",[608,825,826,827,829],{},"By default, all routes are logged. Use ",[635,828,819],{}," to restrict logging to specific patterns:",[831,832,838],"pre",{"className":833,"code":834,"filename":835,"language":836,"meta":837,"style":837},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    include: ['\u002Fapi\u002F**'],\n  },\n})\n","nuxt.config.ts","typescript","",[635,839,840,864,892,903,924,930],{"__ignoreMap":837},[841,842,845,849,852,856,860],"span",{"class":843,"line":844},"line",1,[841,846,848],{"class":847},"s7zQu","export",[841,850,851],{"class":847}," default",[841,853,855],{"class":854},"s2Zo4"," defineNuxtConfig",[841,857,859],{"class":858},"sTEyZ","(",[841,861,863],{"class":862},"sMK4o","{\n",[841,865,867,871,874,877,880,884,886,889],{"class":843,"line":866},2,[841,868,870],{"class":869},"swJcz","  modules",[841,872,873],{"class":862},":",[841,875,876],{"class":858}," [",[841,878,879],{"class":862},"'",[841,881,883],{"class":882},"sfazB","evlog\u002Fnuxt",[841,885,879],{"class":862},[841,887,888],{"class":858},"]",[841,890,891],{"class":862},",\n",[841,893,895,898,900],{"class":843,"line":894},3,[841,896,897],{"class":869},"  evlog",[841,899,873],{"class":862},[841,901,902],{"class":862}," {\n",[841,904,906,909,911,913,915,918,920,922],{"class":843,"line":905},4,[841,907,908],{"class":869},"    include",[841,910,873],{"class":862},[841,912,876],{"class":858},[841,914,879],{"class":862},[841,916,917],{"class":882},"\u002Fapi\u002F**",[841,919,879],{"class":862},[841,921,888],{"class":858},[841,923,891],{"class":862},[841,925,927],{"class":843,"line":926},5,[841,928,929],{"class":862},"  },\n",[841,931,933,936],{"class":843,"line":932},6,[841,934,935],{"class":862},"}",[841,937,938],{"class":858},")\n",[810,940,942],{"id":941},"_2-logger-creation","2. Logger Creation",[608,944,945,946,949],{},"For matched routes, evlog creates a ",[635,947,948],{},"RequestLogger"," and attaches it to the request context. The logger is pre-populated with:",[620,951,952,962],{},[623,953,954],{},[626,955,956,959],{},[629,957,958],{},"Field",[629,960,961],{},"Source",[652,963,964,982,992,1006],{},[626,965,966,971],{},[657,967,968],{},[635,969,970],{},"method",[657,972,973,974,977,978,981],{},"HTTP method (",[635,975,976],{},"GET",", ",[635,979,980],{},"POST",", ...)",[626,983,984,989],{},[657,985,986],{},[635,987,988],{},"path",[657,990,991],{},"Request path",[626,993,994,999],{},[657,995,996],{},[635,997,998],{},"requestId",[657,1000,1001,1002,1005],{},"Auto-generated UUID (or ",[635,1003,1004],{},"cf-ray"," on Cloudflare)",[626,1007,1008,1013],{},[657,1009,1010],{},[635,1011,1012],{},"startTime",[657,1014,1015,1018],{},[635,1016,1017],{},"Date.now()"," for duration calculation",[608,1020,1021,1022,1024],{},"The logger is stored on the event context. ",[635,1023,701],{}," is a shortcut to retrieve it, it doesn't create a new logger.",[810,1026,1028],{"id":1027},"_3-context-accumulation","3. Context Accumulation",[608,1030,1031,1032,1034],{},"During the handler, you call ",[635,1033,692],{}," to attach context. Each call deep-merges into the existing context, so you can call it as many times as needed:",[831,1036,1039],{"className":833,"code":1037,"filename":1038,"language":836,"meta":837,"style":837},"import { useLogger } from 'evlog'\n\nconst log = useLogger(event)\n\nconst user = await getUser(event)\nlog.set({ user: { id: user.id, plan: user.plan } })\n\nconst cart = await getCart(user.id)\nlog.set({ cart: { items: cart.items.length, total: cart.total } })\n","server\u002Fapi\u002Fcheckout.post.ts",[635,1040,1041,1067,1073,1090,1094,1111,1165,1170,1193],{"__ignoreMap":837},[841,1042,1043,1046,1049,1052,1055,1058,1061,1064],{"class":843,"line":844},[841,1044,1045],{"class":847},"import",[841,1047,1048],{"class":862}," {",[841,1050,1051],{"class":858}," useLogger",[841,1053,1054],{"class":862}," }",[841,1056,1057],{"class":847}," from",[841,1059,1060],{"class":862}," '",[841,1062,1063],{"class":882},"evlog",[841,1065,1066],{"class":862},"'\n",[841,1068,1069],{"class":843,"line":866},[841,1070,1072],{"emptyLinePlaceholder":1071},true,"\n",[841,1074,1075,1079,1082,1085,1087],{"class":843,"line":894},[841,1076,1078],{"class":1077},"spNyl","const",[841,1080,1081],{"class":858}," log ",[841,1083,1084],{"class":862},"=",[841,1086,1051],{"class":854},[841,1088,1089],{"class":858},"(event)\n",[841,1091,1092],{"class":843,"line":905},[841,1093,1072],{"emptyLinePlaceholder":1071},[841,1095,1096,1098,1101,1103,1106,1109],{"class":843,"line":926},[841,1097,1078],{"class":1077},[841,1099,1100],{"class":858}," user ",[841,1102,1084],{"class":862},[841,1104,1105],{"class":847}," await",[841,1107,1108],{"class":854}," getUser",[841,1110,1089],{"class":858},[841,1112,1113,1115,1118,1120,1122,1125,1128,1130,1132,1135,1137,1139,1141,1144,1147,1150,1152,1154,1156,1159,1161,1163],{"class":843,"line":932},[841,1114,637],{"class":858},[841,1116,1117],{"class":862},".",[841,1119,779],{"class":854},[841,1121,859],{"class":858},[841,1123,1124],{"class":862},"{",[841,1126,1127],{"class":869}," user",[841,1129,873],{"class":862},[841,1131,1048],{"class":862},[841,1133,1134],{"class":869}," id",[841,1136,873],{"class":862},[841,1138,1127],{"class":858},[841,1140,1117],{"class":862},[841,1142,1143],{"class":858},"id",[841,1145,1146],{"class":862},",",[841,1148,1149],{"class":869}," plan",[841,1151,873],{"class":862},[841,1153,1127],{"class":858},[841,1155,1117],{"class":862},[841,1157,1158],{"class":858},"plan ",[841,1160,935],{"class":862},[841,1162,1054],{"class":862},[841,1164,938],{"class":858},[841,1166,1168],{"class":843,"line":1167},7,[841,1169,1072],{"emptyLinePlaceholder":1071},[841,1171,1173,1175,1178,1180,1182,1185,1188,1190],{"class":843,"line":1172},8,[841,1174,1078],{"class":1077},[841,1176,1177],{"class":858}," cart ",[841,1179,1084],{"class":862},[841,1181,1105],{"class":847},[841,1183,1184],{"class":854}," getCart",[841,1186,1187],{"class":858},"(user",[841,1189,1117],{"class":862},[841,1191,1192],{"class":858},"id)\n",[841,1194,1196,1198,1200,1202,1204,1206,1209,1211,1213,1216,1218,1220,1222,1225,1227,1230,1232,1235,1237,1239,1241,1244,1246,1248],{"class":843,"line":1195},9,[841,1197,637],{"class":858},[841,1199,1117],{"class":862},[841,1201,779],{"class":854},[841,1203,859],{"class":858},[841,1205,1124],{"class":862},[841,1207,1208],{"class":869}," cart",[841,1210,873],{"class":862},[841,1212,1048],{"class":862},[841,1214,1215],{"class":869}," items",[841,1217,873],{"class":862},[841,1219,1208],{"class":858},[841,1221,1117],{"class":862},[841,1223,1224],{"class":858},"items",[841,1226,1117],{"class":862},[841,1228,1229],{"class":858},"length",[841,1231,1146],{"class":862},[841,1233,1234],{"class":869}," total",[841,1236,873],{"class":862},[841,1238,1208],{"class":858},[841,1240,1117],{"class":862},[841,1242,1243],{"class":858},"total ",[841,1245,935],{"class":862},[841,1247,1054],{"class":862},[841,1249,938],{"class":858},[608,1251,1252,1253,1255],{},"If an error is thrown, evlog's ",[635,1254,782],{}," hook captures it automatically and records it on the logger with the status code.",[810,1257,1259],{"id":1258},"_4-request-end","4. Request End",[608,1261,1262],{},"When the response is sent (or an error is thrown), evlog computes:",[1264,1265,1266,1280,1289],"ul",{},[1267,1268,1269,1272,1273,644,1276,1279],"li",{},[660,1270,1271],{},"Status code"," from the response (or from the error's ",[635,1274,1275],{},"status",[635,1277,1278],{},"statusCode",")",[1267,1281,1282,1285,1286],{},[660,1283,1284],{},"Duration"," from ",[635,1287,1288],{},"Date.now() - startTime",[1267,1290,1291,1294,1295,1297,1298,1300,1301],{},[660,1292,1293],{},"Level"," - ",[635,1296,782],{}," if an error was recorded, ",[635,1299,788],{}," if status >= 400, otherwise ",[635,1302,785],{},[608,1304,1305],{},"If an error triggered the emit, the request is marked as already emitted to prevent double-emission in the response hook.",[810,1307,1309,1310,1279],{"id":1308},"_5-tail-sampling-evlogemitkeep","5. Tail Sampling (",[635,1311,1312],{},"evlog:emit:keep",[608,1314,1315,1316,1319,1320,1324],{},"Before the event is sampled, evlog evaluates ",[660,1317,1318],{},"tail sampling"," rules. These run ",[1321,1322,1323],"em",{},"after"," the request completes, so they can inspect the outcome:",[831,1326,1328],{"className":833,"code":1327,"filename":835,"language":836,"meta":837,"style":837},"evlog: {\n  sampling: {\n    keep: [\n      { duration: 1000 },          \u002F\u002F slow requests\n      { status: 400 },             \u002F\u002F client\u002Fserver errors\n      { path: '\u002Fapi\u002Fcritical\u002F**' }, \u002F\u002F critical paths\n    ],\n  },\n}\n",[635,1329,1330,1339,1348,1358,1379,1396,1417,1424,1428],{"__ignoreMap":837},[841,1331,1332,1335,1337],{"class":843,"line":844},[841,1333,1063],{"class":1334},"sBMFI",[841,1336,873],{"class":862},[841,1338,902],{"class":862},[841,1340,1341,1344,1346],{"class":843,"line":866},[841,1342,1343],{"class":1334},"  sampling",[841,1345,873],{"class":862},[841,1347,902],{"class":862},[841,1349,1350,1353,1355],{"class":843,"line":894},[841,1351,1352],{"class":1334},"    keep",[841,1354,873],{"class":862},[841,1356,1357],{"class":869}," [\n",[841,1359,1360,1363,1366,1368,1372,1375],{"class":843,"line":905},[841,1361,1362],{"class":862},"      {",[841,1364,1365],{"class":869}," duration",[841,1367,873],{"class":862},[841,1369,1371],{"class":1370},"sbssI"," 1000",[841,1373,1374],{"class":862}," },",[841,1376,1378],{"class":1377},"sHwdD","          \u002F\u002F slow requests\n",[841,1380,1381,1383,1386,1388,1391,1393],{"class":843,"line":926},[841,1382,1362],{"class":862},[841,1384,1385],{"class":869}," status",[841,1387,873],{"class":862},[841,1389,1390],{"class":1370}," 400",[841,1392,1374],{"class":862},[841,1394,1395],{"class":1377},"             \u002F\u002F client\u002Fserver errors\n",[841,1397,1398,1400,1403,1405,1407,1410,1412,1414],{"class":843,"line":932},[841,1399,1362],{"class":862},[841,1401,1402],{"class":869}," path",[841,1404,873],{"class":862},[841,1406,1060],{"class":862},[841,1408,1409],{"class":882},"\u002Fapi\u002Fcritical\u002F**",[841,1411,879],{"class":862},[841,1413,1374],{"class":862},[841,1415,1416],{"class":1377}," \u002F\u002F critical paths\n",[841,1418,1419,1422],{"class":843,"line":1167},[841,1420,1421],{"class":869},"    ]",[841,1423,891],{"class":862},[841,1425,1426],{"class":843,"line":1172},[841,1427,929],{"class":862},[841,1429,1430],{"class":843,"line":1195},[841,1431,1432],{"class":862},"}\n",[608,1434,1435,1436,1438],{},"The ",[635,1437,1312],{}," hook also fires, letting you force-keep based on custom business logic:",[831,1440,1443],{"className":833,"code":1441,"filename":1442,"language":836,"meta":837,"style":837},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:emit:keep', (ctx) => {\n    if (ctx.context.user?.premium) {\n      ctx.shouldKeep = true\n    }\n  })\n})\n","server\u002Fplugins\u002Fevlog-custom.ts",[635,1444,1445,1469,1506,1536,1553,1558,1565],{"__ignoreMap":837},[841,1446,1447,1449,1451,1454,1456,1458,1462,1464,1467],{"class":843,"line":844},[841,1448,848],{"class":847},[841,1450,851],{"class":847},[841,1452,1453],{"class":854}," defineNitroPlugin",[841,1455,859],{"class":858},[841,1457,859],{"class":862},[841,1459,1461],{"class":1460},"sHdIc","nitroApp",[841,1463,1279],{"class":862},[841,1465,1466],{"class":1077}," =>",[841,1468,902],{"class":862},[841,1470,1471,1474,1476,1479,1481,1484,1486,1488,1490,1492,1494,1497,1500,1502,1504],{"class":843,"line":866},[841,1472,1473],{"class":858},"  nitroApp",[841,1475,1117],{"class":862},[841,1477,1478],{"class":858},"hooks",[841,1480,1117],{"class":862},[841,1482,1483],{"class":854},"hook",[841,1485,859],{"class":869},[841,1487,879],{"class":862},[841,1489,1312],{"class":882},[841,1491,879],{"class":862},[841,1493,1146],{"class":862},[841,1495,1496],{"class":862}," (",[841,1498,1499],{"class":1460},"ctx",[841,1501,1279],{"class":862},[841,1503,1466],{"class":1077},[841,1505,902],{"class":862},[841,1507,1508,1511,1513,1515,1517,1520,1522,1525,1528,1531,1534],{"class":843,"line":894},[841,1509,1510],{"class":847},"    if",[841,1512,1496],{"class":869},[841,1514,1499],{"class":858},[841,1516,1117],{"class":862},[841,1518,1519],{"class":858},"context",[841,1521,1117],{"class":862},[841,1523,1524],{"class":858},"user",[841,1526,1527],{"class":862},"?.",[841,1529,1530],{"class":858},"premium",[841,1532,1533],{"class":869},") ",[841,1535,863],{"class":862},[841,1537,1538,1541,1543,1546,1549],{"class":843,"line":905},[841,1539,1540],{"class":858},"      ctx",[841,1542,1117],{"class":862},[841,1544,1545],{"class":858},"shouldKeep",[841,1547,1548],{"class":862}," =",[841,1550,1552],{"class":1551},"sfNiH"," true\n",[841,1554,1555],{"class":843,"line":926},[841,1556,1557],{"class":862},"    }\n",[841,1559,1560,1563],{"class":843,"line":932},[841,1561,1562],{"class":862},"  }",[841,1564,938],{"class":869},[841,1566,1567,1569],{"class":843,"line":1167},[841,1568,935],{"class":862},[841,1570,938],{"class":858},[608,1572,1573,1574,1577,1578,1117],{},"If any rule or hook sets ",[635,1575,1576],{},"shouldKeep = true",", the event ",[660,1579,1580],{},"bypasses head sampling entirely",[810,1582,1584],{"id":1583},"_6-head-sampling","6. Head Sampling",[608,1586,1587],{},"If the event wasn't force-kept by tail sampling, head sampling applies. This is a random coin flip per log level.",[608,1589,1590,1591,1594],{},"By default, all levels are kept at 100% (no sampling). Configure ",[635,1592,1593],{},"sampling.rates"," to reduce volume in production:",[831,1596,1598],{"className":833,"code":1597,"filename":835,"language":836,"meta":837,"style":837},"evlog: {\n  sampling: {\n    rates: { info: 10, warn: 50, debug: 0 },\n  },\n}\n",[635,1599,1600,1608,1616,1656,1660],{"__ignoreMap":837},[841,1601,1602,1604,1606],{"class":843,"line":844},[841,1603,1063],{"class":1334},[841,1605,873],{"class":862},[841,1607,902],{"class":862},[841,1609,1610,1612,1614],{"class":843,"line":866},[841,1611,1343],{"class":1334},[841,1613,873],{"class":862},[841,1615,902],{"class":862},[841,1617,1618,1621,1623,1625,1628,1630,1633,1635,1638,1640,1643,1645,1648,1650,1653],{"class":843,"line":894},[841,1619,1620],{"class":1334},"    rates",[841,1622,873],{"class":862},[841,1624,1048],{"class":862},[841,1626,1627],{"class":1334}," info",[841,1629,873],{"class":862},[841,1631,1632],{"class":1370}," 10",[841,1634,1146],{"class":862},[841,1636,1637],{"class":1334}," warn",[841,1639,873],{"class":862},[841,1641,1642],{"class":1370}," 50",[841,1644,1146],{"class":862},[841,1646,1647],{"class":1334}," debug",[841,1649,873],{"class":862},[841,1651,1652],{"class":1370}," 0",[841,1654,1655],{"class":862}," },\n",[841,1657,1658],{"class":843,"line":905},[841,1659,929],{"class":862},[841,1661,1662],{"class":843,"line":926},[841,1663,1432],{"class":862},[1264,1665,1666,1672,1678],{},[1267,1667,1668,1671],{},[635,1669,1670],{},"info: 10"," - keep 10% of info-level events",[1267,1673,1674,1677],{},[635,1675,1676],{},"warn: 50"," - keep 50% of warnings",[1267,1679,1680,1682,1683,1686],{},[635,1681,782],{}," defaults to ",[660,1684,1685],{},"100%"," (never sampled out, even if you set a rate)",[608,1688,1689],{},"If the event is sampled out, processing stops entirely: no console output, no enrichment, no drain.",[810,1691,1693],{"id":1692},"_7-emit","7. Emit",[608,1695,1435,1696,1699],{},[635,1697,1698],{},"WideEvent"," object is built from the accumulated context:",[831,1701,1705],{"className":1702,"code":1703,"filename":1698,"language":1704,"meta":837,"style":837},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"timestamp\": \"2026-01-15T10:30:00.000Z\",\n  \"level\": \"info\",\n  \"service\": \"my-app\",\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Fcheckout\",\n  \"requestId\": \"abc-123\",\n  \"duration\": 234,\n  \"status\": 200,\n  \"user\": { \"id\": 1, \"plan\": \"pro\" },\n  \"cart\": { \"items\": 3, \"total\": 9999 }\n}\n","json",[635,1706,1707,1711,1734,1753,1773,1791,1810,1829,1845,1860,1904,1946],{"__ignoreMap":837},[841,1708,1709],{"class":843,"line":844},[841,1710,863],{"class":862},[841,1712,1713,1716,1719,1722,1724,1727,1730,1732],{"class":843,"line":866},[841,1714,1715],{"class":862},"  \"",[841,1717,1718],{"class":1077},"timestamp",[841,1720,1721],{"class":862},"\"",[841,1723,873],{"class":862},[841,1725,1726],{"class":862}," \"",[841,1728,1729],{"class":882},"2026-01-15T10:30:00.000Z",[841,1731,1721],{"class":862},[841,1733,891],{"class":862},[841,1735,1736,1738,1741,1743,1745,1747,1749,1751],{"class":843,"line":894},[841,1737,1715],{"class":862},[841,1739,1740],{"class":1077},"level",[841,1742,1721],{"class":862},[841,1744,873],{"class":862},[841,1746,1726],{"class":862},[841,1748,785],{"class":882},[841,1750,1721],{"class":862},[841,1752,891],{"class":862},[841,1754,1755,1757,1760,1762,1764,1766,1769,1771],{"class":843,"line":905},[841,1756,1715],{"class":862},[841,1758,1759],{"class":1077},"service",[841,1761,1721],{"class":862},[841,1763,873],{"class":862},[841,1765,1726],{"class":862},[841,1767,1768],{"class":882},"my-app",[841,1770,1721],{"class":862},[841,1772,891],{"class":862},[841,1774,1775,1777,1779,1781,1783,1785,1787,1789],{"class":843,"line":926},[841,1776,1715],{"class":862},[841,1778,970],{"class":1077},[841,1780,1721],{"class":862},[841,1782,873],{"class":862},[841,1784,1726],{"class":862},[841,1786,980],{"class":882},[841,1788,1721],{"class":862},[841,1790,891],{"class":862},[841,1792,1793,1795,1797,1799,1801,1803,1806,1808],{"class":843,"line":932},[841,1794,1715],{"class":862},[841,1796,988],{"class":1077},[841,1798,1721],{"class":862},[841,1800,873],{"class":862},[841,1802,1726],{"class":862},[841,1804,1805],{"class":882},"\u002Fapi\u002Fcheckout",[841,1807,1721],{"class":862},[841,1809,891],{"class":862},[841,1811,1812,1814,1816,1818,1820,1822,1825,1827],{"class":843,"line":1167},[841,1813,1715],{"class":862},[841,1815,998],{"class":1077},[841,1817,1721],{"class":862},[841,1819,873],{"class":862},[841,1821,1726],{"class":862},[841,1823,1824],{"class":882},"abc-123",[841,1826,1721],{"class":862},[841,1828,891],{"class":862},[841,1830,1831,1833,1836,1838,1840,1843],{"class":843,"line":1172},[841,1832,1715],{"class":862},[841,1834,1835],{"class":1077},"duration",[841,1837,1721],{"class":862},[841,1839,873],{"class":862},[841,1841,1842],{"class":1370}," 234",[841,1844,891],{"class":862},[841,1846,1847,1849,1851,1853,1855,1858],{"class":843,"line":1195},[841,1848,1715],{"class":862},[841,1850,1275],{"class":1077},[841,1852,1721],{"class":862},[841,1854,873],{"class":862},[841,1856,1857],{"class":1370}," 200",[841,1859,891],{"class":862},[841,1861,1863,1865,1867,1869,1871,1873,1875,1877,1879,1881,1884,1886,1888,1891,1893,1895,1897,1900,1902],{"class":843,"line":1862},10,[841,1864,1715],{"class":862},[841,1866,1524],{"class":1077},[841,1868,1721],{"class":862},[841,1870,873],{"class":862},[841,1872,1048],{"class":862},[841,1874,1726],{"class":862},[841,1876,1143],{"class":1334},[841,1878,1721],{"class":862},[841,1880,873],{"class":862},[841,1882,1883],{"class":1370}," 1",[841,1885,1146],{"class":862},[841,1887,1726],{"class":862},[841,1889,1890],{"class":1334},"plan",[841,1892,1721],{"class":862},[841,1894,873],{"class":862},[841,1896,1726],{"class":862},[841,1898,1899],{"class":882},"pro",[841,1901,1721],{"class":862},[841,1903,1655],{"class":862},[841,1905,1907,1909,1912,1914,1916,1918,1920,1922,1924,1926,1929,1931,1933,1936,1938,1940,1943],{"class":843,"line":1906},11,[841,1908,1715],{"class":862},[841,1910,1911],{"class":1077},"cart",[841,1913,1721],{"class":862},[841,1915,873],{"class":862},[841,1917,1048],{"class":862},[841,1919,1726],{"class":862},[841,1921,1224],{"class":1334},[841,1923,1721],{"class":862},[841,1925,873],{"class":862},[841,1927,1928],{"class":1370}," 3",[841,1930,1146],{"class":862},[841,1932,1726],{"class":862},[841,1934,1935],{"class":1334},"total",[841,1937,1721],{"class":862},[841,1939,873],{"class":862},[841,1941,1942],{"class":1370}," 9999",[841,1944,1945],{"class":862}," }\n",[841,1947,1949],{"class":843,"line":1948},12,[841,1950,1432],{"class":862},[608,1952,1953],{},"The logger is sealed at this point. Nothing is printed yet: the console line waits for enrichers, so the terminal shows the same event drains receive.",[810,1955,1957,1958,1279],{"id":1956},"_8-enrich-evlogenrich","8. Enrich (",[635,1959,1960],{},"evlog:enrich",[608,1962,1963],{},"After emission, enrichers add derived context to the event. Built-in enrichers extract data from request headers:",[620,1965,1966,1978],{},[623,1967,1968],{},[626,1969,1970,1973,1976],{},[629,1971,1972],{},"Enricher",[629,1974,1975],{},"Adds",[629,1977,961],{},[652,1979,1980,1997,2011,2028],{},[626,1981,1982,1985,1991],{},[657,1983,1984],{},"User Agent",[657,1986,1987,1990],{},[635,1988,1989],{},"userAgent"," (browser, OS, device)",[657,1992,1993,1996],{},[635,1994,1995],{},"User-Agent"," header",[626,1998,1999,2002,2008],{},[657,2000,2001],{},"Geo",[657,2003,2004,2007],{},[635,2005,2006],{},"geo"," (country, region, city)",[657,2009,2010],{},"Platform headers (Vercel, Cloudflare)",[626,2012,2013,2016,2022],{},[657,2014,2015],{},"Request Size",[657,2017,2018,2021],{},[635,2019,2020],{},"requestSize"," (request\u002Fresponse bytes)",[657,2023,2024,2027],{},[635,2025,2026],{},"Content-Length"," headers",[626,2029,2030,2033,2039],{},[657,2031,2032],{},"Trace Context",[657,2034,2035,2038],{},[635,2036,2037],{},"traceContext"," (traceId, parentSpanId)",[657,2040,2041,1996],{},[635,2042,2043],{},"traceparent",[831,2045,2048],{"className":833,"code":2046,"filename":2047,"language":836,"meta":837,"style":837},"import { createUserAgentEnricher, createGeoEnricher } from 'evlog\u002Fenrichers'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const enrichers = [createUserAgentEnricher(), createGeoEnricher()]\n\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n  })\n})\n","server\u002Fplugins\u002Fevlog-enrich.ts",[635,2049,2050,2075,2079,2099,2124,2128,2160,2188,2194],{"__ignoreMap":837},[841,2051,2052,2054,2056,2059,2061,2064,2066,2068,2070,2073],{"class":843,"line":844},[841,2053,1045],{"class":847},[841,2055,1048],{"class":862},[841,2057,2058],{"class":858}," createUserAgentEnricher",[841,2060,1146],{"class":862},[841,2062,2063],{"class":858}," createGeoEnricher",[841,2065,1054],{"class":862},[841,2067,1057],{"class":847},[841,2069,1060],{"class":862},[841,2071,2072],{"class":882},"evlog\u002Fenrichers",[841,2074,1066],{"class":862},[841,2076,2077],{"class":843,"line":866},[841,2078,1072],{"emptyLinePlaceholder":1071},[841,2080,2081,2083,2085,2087,2089,2091,2093,2095,2097],{"class":843,"line":894},[841,2082,848],{"class":847},[841,2084,851],{"class":847},[841,2086,1453],{"class":854},[841,2088,859],{"class":858},[841,2090,859],{"class":862},[841,2092,1461],{"class":1460},[841,2094,1279],{"class":862},[841,2096,1466],{"class":1077},[841,2098,902],{"class":862},[841,2100,2101,2104,2107,2109,2111,2114,2117,2119,2121],{"class":843,"line":905},[841,2102,2103],{"class":1077},"  const",[841,2105,2106],{"class":858}," enrichers",[841,2108,1548],{"class":862},[841,2110,876],{"class":869},[841,2112,2113],{"class":854},"createUserAgentEnricher",[841,2115,2116],{"class":869},"()",[841,2118,1146],{"class":862},[841,2120,2063],{"class":854},[841,2122,2123],{"class":869},"()]\n",[841,2125,2126],{"class":843,"line":926},[841,2127,1072],{"emptyLinePlaceholder":1071},[841,2129,2130,2132,2134,2136,2138,2140,2142,2144,2146,2148,2150,2152,2154,2156,2158],{"class":843,"line":932},[841,2131,1473],{"class":858},[841,2133,1117],{"class":862},[841,2135,1478],{"class":858},[841,2137,1117],{"class":862},[841,2139,1483],{"class":854},[841,2141,859],{"class":869},[841,2143,879],{"class":862},[841,2145,1960],{"class":882},[841,2147,879],{"class":862},[841,2149,1146],{"class":862},[841,2151,1496],{"class":862},[841,2153,1499],{"class":1460},[841,2155,1279],{"class":862},[841,2157,1466],{"class":1077},[841,2159,902],{"class":862},[841,2161,2162,2165,2167,2169,2172,2175,2177,2179,2182,2184,2186],{"class":843,"line":1167},[841,2163,2164],{"class":847},"    for",[841,2166,1496],{"class":869},[841,2168,1078],{"class":1077},[841,2170,2171],{"class":858}," enricher",[841,2173,2174],{"class":862}," of",[841,2176,2106],{"class":858},[841,2178,1533],{"class":869},[841,2180,2181],{"class":854},"enricher",[841,2183,859],{"class":869},[841,2185,1499],{"class":858},[841,2187,938],{"class":869},[841,2189,2190,2192],{"class":843,"line":1172},[841,2191,1562],{"class":862},[841,2193,938],{"class":869},[841,2195,2196,2198],{"class":843,"line":1195},[841,2197,935],{"class":862},[841,2199,938],{"class":858},[608,2201,2202,2203,2206],{},"Enrichers receive the full ",[635,2204,2205],{},"EnrichContext"," with the mutable event, request metadata, safe headers, and response info.",[608,2208,2209,2210,977,2212,2214],{},"Once they return, the event is printed to the console, pretty-formatted in development and as JSON in production. No configuration needed. The fields enrichers added (",[635,2211,1989],{},[635,2213,2006],{},", signal verdicts) are on that line, and on any platform that reads stdout.",[810,2216,2218,2219,1279],{"id":2217},"_9-drain-evlogdrain","9. Drain (",[635,2220,2221],{},"evlog:drain",[608,2223,2224,2225,2227,2228,2231],{},"The final step sends the enriched event to your observability platform. The ",[635,2226,2221],{}," hook receives a ",[635,2229,2230],{},"DrainContext"," with the complete event:",[831,2233,2236],{"className":833,"code":2234,"filename":2235,"language":836,"meta":837,"style":837},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', createAxiomDrain())\n})\n","server\u002Fplugins\u002Fevlog-drain.ts",[635,2237,2238,2258,2262,2282,2309],{"__ignoreMap":837},[841,2239,2240,2242,2244,2247,2249,2251,2253,2256],{"class":843,"line":844},[841,2241,1045],{"class":847},[841,2243,1048],{"class":862},[841,2245,2246],{"class":858}," createAxiomDrain",[841,2248,1054],{"class":862},[841,2250,1057],{"class":847},[841,2252,1060],{"class":862},[841,2254,2255],{"class":882},"evlog\u002Faxiom",[841,2257,1066],{"class":862},[841,2259,2260],{"class":843,"line":866},[841,2261,1072],{"emptyLinePlaceholder":1071},[841,2263,2264,2266,2268,2270,2272,2274,2276,2278,2280],{"class":843,"line":894},[841,2265,848],{"class":847},[841,2267,851],{"class":847},[841,2269,1453],{"class":854},[841,2271,859],{"class":858},[841,2273,859],{"class":862},[841,2275,1461],{"class":1460},[841,2277,1279],{"class":862},[841,2279,1466],{"class":1077},[841,2281,902],{"class":862},[841,2283,2284,2286,2288,2290,2292,2294,2296,2298,2300,2302,2304,2306],{"class":843,"line":905},[841,2285,1473],{"class":858},[841,2287,1117],{"class":862},[841,2289,1478],{"class":858},[841,2291,1117],{"class":862},[841,2293,1483],{"class":854},[841,2295,859],{"class":869},[841,2297,879],{"class":862},[841,2299,2221],{"class":882},[841,2301,879],{"class":862},[841,2303,1146],{"class":862},[841,2305,2246],{"class":854},[841,2307,2308],{"class":869},"())\n",[841,2310,2311,2313],{"class":843,"line":926},[841,2312,935],{"class":862},[841,2314,938],{"class":858},[608,2316,2317,2318,2321],{},"On platforms with ",[635,2319,2320],{},"waitUntil"," (Cloudflare Workers, Vercel Edge), the drain runs after the response is sent to avoid adding latency. On traditional servers, the drain is awaited to prevent losing events in serverless cold shutdowns.",[615,2323,2325],{"id":2324},"know-when-each-hook-runs","Know when each hook runs",[620,2327,2328,2344],{},[623,2329,2330],{},[626,2331,2332,2335,2338,2341],{},[629,2333,2334],{},"Order",[629,2336,2337],{},"Hook",[629,2339,2340],{},"When",[629,2342,2343],{},"Purpose",[652,2345,2346,2361,2376],{},[626,2347,2348,2351,2355,2358],{},[657,2349,2350],{},"1",[657,2352,2353],{},[635,2354,1312],{},[657,2356,2357],{},"After request ends, before sampling",[657,2359,2360],{},"Force-keep events based on outcome",[626,2362,2363,2366,2370,2373],{},[657,2364,2365],{},"2",[657,2367,2368],{},[635,2369,1960],{},[657,2371,2372],{},"After emit, before console output and drain",[657,2374,2375],{},"Add derived context to the event",[626,2377,2378,2381,2385,2388],{},[657,2379,2380],{},"3",[657,2382,2383],{},[635,2384,2221],{},[657,2386,2387],{},"After enrichment",[657,2389,2390],{},"Send event to external services",[615,2392,2394],{"id":2393},"see-where-the-error-path-diverges","See where the error path diverges",[608,2396,2397,2398,2401],{},"Both paths converge at the same emit\u002Fenrich\u002Fdrain pipeline. The only difference is ",[1321,2399,2400],{},"when"," the emit is triggered:",[620,2403,2404,2416],{},[623,2405,2406],{},[626,2407,2408,2410,2413],{},[629,2409],{},[629,2411,2412],{},"Success",[629,2414,2415],{},"Error",[652,2417,2418,2438,2456,2472,2493],{},[626,2419,2420,2425,2434],{},[657,2421,2422],{},[660,2423,2424],{},"Trigger",[657,2426,2427,644,2430,2433],{},[635,2428,2429],{},"afterResponse",[635,2431,2432],{},"response"," hook",[657,2435,2436,2433],{},[635,2437,782],{},[626,2439,2440,2444,2452],{},[657,2441,2442],{},[660,2443,1293],{},[657,2445,2446,2448,2449,2451],{},[635,2447,785],{}," (or ",[635,2450,788],{}," if status >= 400)",[657,2453,2454],{},[635,2455,782],{},[626,2457,2458,2463,2466],{},[657,2459,2460],{},[660,2461,2462],{},"Status",[657,2464,2465],{},"From response",[657,2467,2468,2469,2471],{},"From error's ",[635,2470,1275],{}," field (default 500)",[626,2473,2474,2479,2482],{},[657,2475,2476],{},[660,2477,2478],{},"Error context",[657,2480,2481],{},"None",[657,2483,2484,2486,2487,977,2490],{},[635,2485,782],{}," field with message, stack, ",[635,2488,2489],{},"why",[635,2491,2492],{},"fix",[626,2494,2495,2500,2507],{},[657,2496,2497],{},[660,2498,2499],{},"Double-emit guard",[657,2501,2502,2503,2506],{},"Checks ",[635,2504,2505],{},"_evlogEmitted"," flag",[657,2508,2509,2510],{},"Sets ",[635,2511,2512],{},"_evlogEmitted = true",[615,2514,2516],{"id":2515},"follow-a-simple-log-call","Follow a simple log call",[608,2518,2519,2520,2522],{},"When using the ",[635,2521,637],{}," singleton, the pipeline is shorter:",[2524,2525,2526,2538,2543],"ol",{},[1267,2527,2528,2531,2532,671,2535],{},[660,2529,2530],{},"Call",": ",[635,2533,2534],{},"log.info({ action: 'deploy' })",[635,2536,2537],{},"log.info('tag', 'message')",[1267,2539,2540,2542],{},[660,2541,708],{},": The event is built and printed immediately",[1267,2544,2545,2547,2548,2551,2552,2555],{},[660,2546,757],{},": If a global ",[635,2549,2550],{},"drain"," was configured via ",[635,2553,2554],{},"initLogger()",", the event is sent to external services",[608,2557,2558,2559,2561,2562,2565],{},"Tagged logs (",[635,2560,2537],{},") are console-only in pretty mode. Object-form logs (",[635,2563,2564],{},"log.info({ ... })",") always flow through the drain pipeline.",[615,2567,2569],{"id":2568},"follow-a-standalone-wide-event","Follow a standalone wide event",[608,2571,2572,2573,2576],{},"When using ",[635,2574,2575],{},"createLogger()"," outside a framework:",[2524,2578,2579,2586,2602,2610,2618],{},[1267,2580,2581,2531,2583],{},[660,2582,662],{},[635,2584,2585],{},"createLogger({ jobId: 'sync-001' })",[1267,2587,2588,2531,2590,977,2592,977,2595,977,2598,2601],{},[660,2589,684],{},[635,2591,692],{},[635,2593,2594],{},"log.info()",[635,2596,2597],{},"log.warn()",[635,2599,2600],{},"log.error()"," over the operation",[1267,2603,2604,2606,2607,2609],{},[660,2605,708],{},": Manual ",[635,2608,717],{}," call",[1267,2611,2612,2614,2615],{},[660,2613,727],{},": Head sampling applies based on computed level. Tail sampling via ",[635,2616,2617],{},"initLogger({ sampling: { keep: [...] } })",[1267,2619,2620,2547,2622,2624],{},[660,2621,757],{},[635,2623,2550],{}," was configured, the event is sent",[831,2626,2629],{"className":833,"code":2627,"filename":2628,"language":836,"meta":837,"style":837},"import { initLogger, createLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\ninitLogger({\n  env: { service: 'worker' },\n  drain: createAxiomDrain(),\n  sampling: { rates: { info: 10 } },\n})\n\nconst log = createLogger({ task: 'migrate' })\nlog.set({ records: 500, status: 'complete' })\nlog.emit()\n","scripts\u002Fmigrate.ts",[635,2630,2631,2655,2673,2677,2686,2709,2722,2747,2753,2757,2787,2824],{"__ignoreMap":837},[841,2632,2633,2635,2637,2640,2642,2645,2647,2649,2651,2653],{"class":843,"line":844},[841,2634,1045],{"class":847},[841,2636,1048],{"class":862},[841,2638,2639],{"class":858}," initLogger",[841,2641,1146],{"class":862},[841,2643,2644],{"class":858}," createLogger",[841,2646,1054],{"class":862},[841,2648,1057],{"class":847},[841,2650,1060],{"class":862},[841,2652,1063],{"class":882},[841,2654,1066],{"class":862},[841,2656,2657,2659,2661,2663,2665,2667,2669,2671],{"class":843,"line":866},[841,2658,1045],{"class":847},[841,2660,1048],{"class":862},[841,2662,2246],{"class":858},[841,2664,1054],{"class":862},[841,2666,1057],{"class":847},[841,2668,1060],{"class":862},[841,2670,2255],{"class":882},[841,2672,1066],{"class":862},[841,2674,2675],{"class":843,"line":894},[841,2676,1072],{"emptyLinePlaceholder":1071},[841,2678,2679,2682,2684],{"class":843,"line":905},[841,2680,2681],{"class":854},"initLogger",[841,2683,859],{"class":858},[841,2685,863],{"class":862},[841,2687,2688,2691,2693,2695,2698,2700,2702,2705,2707],{"class":843,"line":926},[841,2689,2690],{"class":869},"  env",[841,2692,873],{"class":862},[841,2694,1048],{"class":862},[841,2696,2697],{"class":869}," service",[841,2699,873],{"class":862},[841,2701,1060],{"class":862},[841,2703,2704],{"class":882},"worker",[841,2706,879],{"class":862},[841,2708,1655],{"class":862},[841,2710,2711,2714,2716,2718,2720],{"class":843,"line":932},[841,2712,2713],{"class":869},"  drain",[841,2715,873],{"class":862},[841,2717,2246],{"class":854},[841,2719,2116],{"class":858},[841,2721,891],{"class":862},[841,2723,2724,2726,2728,2730,2733,2735,2737,2739,2741,2743,2745],{"class":843,"line":1167},[841,2725,1343],{"class":869},[841,2727,873],{"class":862},[841,2729,1048],{"class":862},[841,2731,2732],{"class":869}," rates",[841,2734,873],{"class":862},[841,2736,1048],{"class":862},[841,2738,1627],{"class":869},[841,2740,873],{"class":862},[841,2742,1632],{"class":1370},[841,2744,1054],{"class":862},[841,2746,1655],{"class":862},[841,2748,2749,2751],{"class":843,"line":1172},[841,2750,935],{"class":862},[841,2752,938],{"class":858},[841,2754,2755],{"class":843,"line":1195},[841,2756,1072],{"emptyLinePlaceholder":1071},[841,2758,2759,2761,2763,2765,2767,2769,2771,2774,2776,2778,2781,2783,2785],{"class":843,"line":1862},[841,2760,1078],{"class":1077},[841,2762,1081],{"class":858},[841,2764,1084],{"class":862},[841,2766,2644],{"class":854},[841,2768,859],{"class":858},[841,2770,1124],{"class":862},[841,2772,2773],{"class":869}," task",[841,2775,873],{"class":862},[841,2777,1060],{"class":862},[841,2779,2780],{"class":882},"migrate",[841,2782,879],{"class":862},[841,2784,1054],{"class":862},[841,2786,938],{"class":858},[841,2788,2789,2791,2793,2795,2797,2799,2802,2804,2807,2809,2811,2813,2815,2818,2820,2822],{"class":843,"line":1906},[841,2790,637],{"class":858},[841,2792,1117],{"class":862},[841,2794,779],{"class":854},[841,2796,859],{"class":858},[841,2798,1124],{"class":862},[841,2800,2801],{"class":869}," records",[841,2803,873],{"class":862},[841,2805,2806],{"class":1370}," 500",[841,2808,1146],{"class":862},[841,2810,1385],{"class":869},[841,2812,873],{"class":862},[841,2814,1060],{"class":862},[841,2816,2817],{"class":882},"complete",[841,2819,879],{"class":862},[841,2821,1054],{"class":862},[841,2823,938],{"class":858},[841,2825,2826,2828,2830,2832],{"class":843,"line":1948},[841,2827,637],{"class":858},[841,2829,1117],{"class":862},[841,2831,771],{"class":854},[841,2833,2834],{"class":858},"()\n",[615,2836,2838],{"id":2837},"next-steps","Next Steps",[1264,2840,2841,2846,2851,2856],{},[1267,2842,2843,2845],{},[797,2844,51],{"href":52}," - Design effective wide events",[1267,2847,2848,2850],{},[797,2849,66],{"href":67}," - Configure head and tail sampling",[1267,2852,2853,2855],{},[797,2854,148],{"href":153}," - Send events to external platforms",[1267,2857,2858,2860],{},[797,2859,440],{"href":441}," - Add derived context automatically",[2862,2863,2864],"style",{},"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":837,"searchDepth":866,"depth":866,"links":2866},[2867,2868,2882,2883,2884,2885,2886],{"id":617,"depth":866,"text":618},{"id":804,"depth":866,"text":805,"children":2869},[2870,2871,2872,2873,2874,2876,2877,2878,2880],{"id":812,"depth":894,"text":813},{"id":941,"depth":894,"text":942},{"id":1027,"depth":894,"text":1028},{"id":1258,"depth":894,"text":1259},{"id":1308,"depth":894,"text":2875},"5. Tail Sampling (evlog:emit:keep)",{"id":1583,"depth":894,"text":1584},{"id":1692,"depth":894,"text":1693},{"id":1956,"depth":894,"text":2879},"8. Enrich (evlog:enrich)",{"id":2217,"depth":894,"text":2881},"9. Drain (evlog:drain)",{"id":2324,"depth":866,"text":2325},{"id":2393,"depth":866,"text":2394},{"id":2515,"depth":866,"text":2516},{"id":2568,"depth":866,"text":2569},{"id":2837,"depth":866,"text":2838},"An evlog event from creation to drain, across all three modes, through sampling, enrichment, and delivery.","md",[2890,2893],{"label":51,"icon":54,"to":52,"color":2891,"variant":2892},"neutral","subtle",{"label":66,"icon":69,"to":67,"color":2891,"variant":2892},{},{"icon":64},{"title":61,"description":2887},"Y_UM3C0XIZMPpuMRB1B_fbeUZlQbrxNhy6NSAvNgrSM",[2899,2901],{"title":56,"path":57,"stem":58,"description":2900,"icon":59,"children":-1},"Create errors that explain why they occurred and how to fix them. Add actionable context with why, fix, and link fields for humans and AI agents.",{"title":66,"path":67,"stem":68,"description":2902,"icon":69,"children":-1},"Two-tier sampling: head sampling drops noise by level, and tail sampling keeps an event once its outcome is known.",1791049454051]