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