[{"data":1,"prerenderedAt":2827},["ShallowReactive",2],{"navigation_docs":3,"-learn-lifecycle":534,"-learn-lifecycle-surround":2822},[4,30,80,128,308,440,499],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"CLI","\u002Fcli","3.cli",[85,88,93,98,103,108,113,118,123],{"title":36,"path":86,"stem":87,"icon":44},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":89,"path":90,"stem":91,"icon":92},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":94,"path":95,"stem":96,"icon":97},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":99,"path":100,"stem":101,"icon":102},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":104,"path":105,"stem":106,"icon":107},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":109,"path":110,"stem":111,"icon":112},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":114,"path":115,"stem":116,"icon":117},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":119,"path":120,"stem":121,"icon":122},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":124,"path":125,"stem":126,"icon":127},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":129,"path":130,"stem":131,"children":132,"page":29},"Integrate","\u002Fintegrate","4.integrate",[133,137,220],{"title":36,"path":134,"stem":135,"icon":136},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[142,145,175,200],{"title":36,"path":143,"stem":144,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":146,"path":147,"stem":148,"children":149,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[150,155,160,165,170],{"title":151,"path":152,"stem":153,"icon":154},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":156,"path":157,"stem":158,"icon":159},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":161,"path":162,"stem":163,"icon":164},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":166,"path":167,"stem":168,"icon":169},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":171,"path":172,"stem":173,"icon":174},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":176,"path":177,"stem":178,"children":179,"page":29},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[180,185,190,195],{"title":181,"path":182,"stem":183,"icon":184},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":186,"path":187,"stem":188,"icon":189},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":191,"path":192,"stem":193,"icon":194},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":196,"path":197,"stem":198,"icon":199},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":201,"path":202,"stem":203,"children":204,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[205,210,215],{"title":206,"path":207,"stem":208,"icon":209},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":211,"path":212,"stem":213,"icon":214},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":216,"path":217,"stem":218,"icon":219},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":221,"path":222,"stem":223,"children":224,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[225,229,234,239,244,249,254,259,264,269,274,279,284,289,293,298,303],{"title":36,"path":226,"stem":227,"icon":228},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":230,"path":231,"stem":232,"icon":233},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":235,"path":236,"stem":237,"icon":238},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":240,"path":241,"stem":242,"icon":243},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":245,"path":246,"stem":247,"icon":248},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":250,"path":251,"stem":252,"icon":253},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":255,"path":256,"stem":257,"icon":258},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":260,"path":261,"stem":262,"icon":263},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":265,"path":266,"stem":267,"icon":268},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":270,"path":271,"stem":272,"icon":273},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":275,"path":276,"stem":277,"icon":278},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":280,"path":281,"stem":282,"icon":283},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":285,"path":286,"stem":287,"icon":288},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":290,"path":291,"stem":292,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":294,"path":295,"stem":296,"icon":297},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":299,"path":300,"stem":301,"icon":302},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":304,"path":305,"stem":306,"icon":307},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":309,"path":310,"stem":311,"children":312,"page":29},"Use Cases","\u002Fuse-cases","5.use-cases",[313,316,321,350,377,409,430,435],{"title":36,"path":314,"stem":315,"icon":102},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":317,"path":318,"stem":319,"icon":320},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":322,"icon":323,"path":324,"stem":325,"children":326,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[327,330,335,340,345],{"title":36,"path":328,"stem":329,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":331,"path":332,"stem":333,"icon":334},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":336,"path":337,"stem":338,"icon":339},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":341,"path":342,"stem":343,"icon":344},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":346,"path":347,"stem":348,"icon":349},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":351,"icon":352,"path":353,"stem":354,"children":355,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[356,359,364,369,373],{"title":36,"path":357,"stem":358,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":360,"path":361,"stem":362,"icon":363},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":365,"path":366,"stem":367,"icon":368},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":370,"path":371,"stem":372,"icon":320},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":374,"path":375,"stem":376,"icon":107},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":378,"icon":379,"path":380,"stem":381,"children":382,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[383,386,391,396,401,405],{"title":36,"path":384,"stem":385,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":387,"path":388,"stem":389,"icon":390},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":392,"path":393,"stem":394,"icon":395},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":397,"path":398,"stem":399,"icon":400},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":402,"path":403,"stem":404,"icon":379},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":406,"path":407,"stem":408,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":346,"icon":107,"path":410,"stem":411,"children":412,"page":29},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[413,416,421,426],{"title":36,"path":414,"stem":415,"icon":39},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":417,"path":418,"stem":419,"icon":420},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":422,"path":423,"stem":424,"icon":425},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":427,"path":428,"stem":429,"icon":79},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":431,"path":432,"stem":433,"icon":434},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":436,"path":437,"stem":438,"icon":439},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":441,"path":442,"stem":443,"children":444,"page":29},"Extend","\u002Fextend","6.extend",[445,449,454,459,463,468,472,476,480,484,489,494],{"title":36,"path":446,"stem":447,"icon":448},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":450,"path":451,"stem":452,"icon":453},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":455,"path":456,"stem":457,"icon":458},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":460,"path":461,"stem":462,"icon":453},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":464,"path":465,"stem":466,"icon":467},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":406,"path":469,"stem":470,"icon":471},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":473,"path":474,"stem":475,"icon":448},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":477,"path":478,"stem":479,"icon":434},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":481,"path":482,"stem":483,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":485,"path":486,"stem":487,"icon":488},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":490,"path":491,"stem":492,"icon":493},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":495,"path":496,"stem":497,"icon":498},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":427,"path":500,"stem":501,"children":502,"page":29},"\u002Freference","7.reference",[503,508,511,516,520,525,529],{"title":504,"path":505,"stem":506,"icon":507},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":374,"path":509,"stem":510,"icon":107},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":512,"path":513,"stem":514,"icon":515},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":517,"path":518,"stem":519,"icon":379},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":521,"path":522,"stem":523,"icon":524},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":526,"path":527,"stem":528,"icon":434},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":530,"path":531,"stem":532,"icon":533},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"id":535,"title":56,"body":536,"description":2811,"extension":2812,"links":2813,"meta":2818,"navigation":2819,"path":57,"seo":2820,"stem":58,"__hash__":2821},"docs\u002F2.learn\u002F4.lifecycle.md",{"type":537,"value":538,"toc":2789},"minimark",[539,543,546,551,696,734,738,741,746,756,762,871,875,882,951,957,961,967,1182,1188,1192,1195,1235,1238,1245,1257,1365,1371,1503,1513,1517,1520,1527,1596,1619,1622,1626,1632,1883,1886,1893,1896,1976,2132,2139,2146,2156,2239,2246,2250,2315,2319,2326,2437,2441,2447,2480,2490,2494,2501,2549,2759,2763,2785],[540,541,542],"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.",[544,545],"lifecycle-flow",{},[547,548,550],"h2",{"id":549},"overview-by-mode","Overview by Mode",[552,553,554,583],"table",{},[555,556,557],"thead",{},[558,559,560,564,571,580],"tr",{},[561,562,563],"th",{},"Stage",[561,565,566,570],{},[567,568,569],"code",{},"log"," (simple)",[561,572,573,576,577],{},[567,574,575],{},"createLogger"," \u002F ",[567,578,579],{},"createRequestLogger",[561,581,582],{},"Framework middleware",[584,585,586,610,634,653,668,683],"tbody",{},[558,587,588,595,598,607],{},[589,590,591],"td",{},[592,593,594],"strong",{},"Create",[589,596,597],{},"Implicit per call",[589,599,600,603,604],{},[567,601,602],{},"createLogger({...})"," or ",[567,605,606],{},"createRequestLogger({...})",[589,608,609],{},"Auto on request start",[558,611,612,617,620,626],{},[589,613,614],{},[592,615,616],{},"Accumulate",[589,618,619],{},"N\u002FA (single call)",[589,621,622,625],{},[567,623,624],{},"log.set()"," multiple times",[589,627,628,630,631],{},[567,629,624],{}," via ",[567,632,633],{},"useLogger(event)",[558,635,636,641,644,650],{},[589,637,638],{},[592,639,640],{},"Emit",[589,642,643],{},"Immediate",[589,645,646,647],{},"Manual ",[567,648,649],{},"log.emit()",[589,651,652],{},"Auto on response end",[558,654,655,660,663,666],{},[589,656,657],{},[592,658,659],{},"Sample",[589,661,662],{},"Head sampling only",[589,664,665],{},"Head + tail sampling",[589,667,665],{},[558,669,670,675,678,680],{},[589,671,672],{},[592,673,674],{},"Enrich",[589,676,677],{},"Via global drain",[589,679,677],{},[589,681,682],{},"Via hooks or callbacks",[558,684,685,690,692,694],{},[589,686,687],{},[592,688,689],{},"Drain",[589,691,677],{},[589,693,677],{},[589,695,682],{},[540,697,698,699,704,705,708,709,576,712,576,715,576,718,721,722,727,728,733],{},"After ",[592,700,701],{},[567,702,703],{},"emit"," (including when sampling returns no output), the request logger is ",[592,706,707],{},"sealed",": later ",[567,710,711],{},"set",[567,713,714],{},"error",[567,716,717],{},"info",[567,719,720],{},"warn"," calls are ignored with a console warning. For background work that needs its own event, use ",[592,723,724],{},[567,725,726],{},"log.fork()"," where your integration supports it. See ",[729,730,732],"a",{"href":731},"\u002Flearn\u002Fwide-events#after-emit-sealing-and-background-work","After emit"," in Wide events.",[547,735,737],{"id":736},"request-logging-step-by-step","Request Logging — Step by Step",[540,739,740],{},"For framework-managed request logging, every request walks the pipeline above. Each stage is detailed below.",[742,743,745],"h3",{"id":744},"_1-route-filtering","1. Route Filtering",[540,747,748,749,576,752,755],{},"When a request arrives, evlog checks whether the path matches the configured ",[567,750,751],{},"include",[567,753,754],{},"exclude"," patterns. If the route is excluded, no logger is created and the request proceeds without any logging overhead.",[540,757,758,759,761],{},"By default, all routes are logged. Use ",[567,760,751],{}," to restrict logging to specific patterns:",[763,764,770],"pre",{"className":765,"code":766,"filename":767,"language":768,"meta":769,"style":769},"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","",[567,771,772,796,824,835,856,862],{"__ignoreMap":769},[773,774,777,781,784,788,792],"span",{"class":775,"line":776},"line",1,[773,778,780],{"class":779},"s7zQu","export",[773,782,783],{"class":779}," default",[773,785,787],{"class":786},"s2Zo4"," defineNuxtConfig",[773,789,791],{"class":790},"sTEyZ","(",[773,793,795],{"class":794},"sMK4o","{\n",[773,797,799,803,806,809,812,816,818,821],{"class":775,"line":798},2,[773,800,802],{"class":801},"swJcz","  modules",[773,804,805],{"class":794},":",[773,807,808],{"class":790}," [",[773,810,811],{"class":794},"'",[773,813,815],{"class":814},"sfazB","evlog\u002Fnuxt",[773,817,811],{"class":794},[773,819,820],{"class":790},"]",[773,822,823],{"class":794},",\n",[773,825,827,830,832],{"class":775,"line":826},3,[773,828,829],{"class":801},"  evlog",[773,831,805],{"class":794},[773,833,834],{"class":794}," {\n",[773,836,838,841,843,845,847,850,852,854],{"class":775,"line":837},4,[773,839,840],{"class":801},"    include",[773,842,805],{"class":794},[773,844,808],{"class":790},[773,846,811],{"class":794},[773,848,849],{"class":814},"\u002Fapi\u002F**",[773,851,811],{"class":794},[773,853,820],{"class":790},[773,855,823],{"class":794},[773,857,859],{"class":775,"line":858},5,[773,860,861],{"class":794},"  },\n",[773,863,865,868],{"class":775,"line":864},6,[773,866,867],{"class":794},"}",[773,869,870],{"class":790},")\n",[742,872,874],{"id":873},"_2-logger-creation","2. Logger Creation",[540,876,877,878,881],{},"For matched routes, evlog creates a ",[567,879,880],{},"RequestLogger"," and attaches it to the request context. The logger is pre-populated with:",[552,883,884,894],{},[555,885,886],{},[558,887,888,891],{},[561,889,890],{},"Field",[561,892,893],{},"Source",[584,895,896,914,924,938],{},[558,897,898,903],{},[589,899,900],{},[567,901,902],{},"method",[589,904,905,906,909,910,913],{},"HTTP method (",[567,907,908],{},"GET",", ",[567,911,912],{},"POST",", ...)",[558,915,916,921],{},[589,917,918],{},[567,919,920],{},"path",[589,922,923],{},"Request path",[558,925,926,931],{},[589,927,928],{},[567,929,930],{},"requestId",[589,932,933,934,937],{},"Auto-generated UUID (or ",[567,935,936],{},"cf-ray"," on Cloudflare)",[558,939,940,945],{},[589,941,942],{},[567,943,944],{},"startTime",[589,946,947,950],{},[567,948,949],{},"Date.now()"," for duration calculation",[540,952,953,954,956],{},"The logger is stored on the event context. ",[567,955,633],{}," is a shortcut to retrieve it, it doesn't create a new logger.",[742,958,960],{"id":959},"_3-context-accumulation","3. Context Accumulation",[540,962,963,964,966],{},"During the handler, you call ",[567,965,624],{}," to attach context. Each call deep-merges into the existing context, so you can call it as many times as needed:",[763,968,971],{"className":765,"code":969,"filename":970,"language":768,"meta":769,"style":769},"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",[567,972,973,999,1005,1022,1026,1043,1097,1102,1125],{"__ignoreMap":769},[773,974,975,978,981,984,987,990,993,996],{"class":775,"line":776},[773,976,977],{"class":779},"import",[773,979,980],{"class":794}," {",[773,982,983],{"class":790}," useLogger",[773,985,986],{"class":794}," }",[773,988,989],{"class":779}," from",[773,991,992],{"class":794}," '",[773,994,995],{"class":814},"evlog",[773,997,998],{"class":794},"'\n",[773,1000,1001],{"class":775,"line":798},[773,1002,1004],{"emptyLinePlaceholder":1003},true,"\n",[773,1006,1007,1011,1014,1017,1019],{"class":775,"line":826},[773,1008,1010],{"class":1009},"spNyl","const",[773,1012,1013],{"class":790}," log ",[773,1015,1016],{"class":794},"=",[773,1018,983],{"class":786},[773,1020,1021],{"class":790},"(event)\n",[773,1023,1024],{"class":775,"line":837},[773,1025,1004],{"emptyLinePlaceholder":1003},[773,1027,1028,1030,1033,1035,1038,1041],{"class":775,"line":858},[773,1029,1010],{"class":1009},[773,1031,1032],{"class":790}," user ",[773,1034,1016],{"class":794},[773,1036,1037],{"class":779}," await",[773,1039,1040],{"class":786}," getUser",[773,1042,1021],{"class":790},[773,1044,1045,1047,1050,1052,1054,1057,1060,1062,1064,1067,1069,1071,1073,1076,1079,1082,1084,1086,1088,1091,1093,1095],{"class":775,"line":864},[773,1046,569],{"class":790},[773,1048,1049],{"class":794},".",[773,1051,711],{"class":786},[773,1053,791],{"class":790},[773,1055,1056],{"class":794},"{",[773,1058,1059],{"class":801}," user",[773,1061,805],{"class":794},[773,1063,980],{"class":794},[773,1065,1066],{"class":801}," id",[773,1068,805],{"class":794},[773,1070,1059],{"class":790},[773,1072,1049],{"class":794},[773,1074,1075],{"class":790},"id",[773,1077,1078],{"class":794},",",[773,1080,1081],{"class":801}," plan",[773,1083,805],{"class":794},[773,1085,1059],{"class":790},[773,1087,1049],{"class":794},[773,1089,1090],{"class":790},"plan ",[773,1092,867],{"class":794},[773,1094,986],{"class":794},[773,1096,870],{"class":790},[773,1098,1100],{"class":775,"line":1099},7,[773,1101,1004],{"emptyLinePlaceholder":1003},[773,1103,1105,1107,1110,1112,1114,1117,1120,1122],{"class":775,"line":1104},8,[773,1106,1010],{"class":1009},[773,1108,1109],{"class":790}," cart ",[773,1111,1016],{"class":794},[773,1113,1037],{"class":779},[773,1115,1116],{"class":786}," getCart",[773,1118,1119],{"class":790},"(user",[773,1121,1049],{"class":794},[773,1123,1124],{"class":790},"id)\n",[773,1126,1128,1130,1132,1134,1136,1138,1141,1143,1145,1148,1150,1152,1154,1157,1159,1162,1164,1167,1169,1171,1173,1176,1178,1180],{"class":775,"line":1127},9,[773,1129,569],{"class":790},[773,1131,1049],{"class":794},[773,1133,711],{"class":786},[773,1135,791],{"class":790},[773,1137,1056],{"class":794},[773,1139,1140],{"class":801}," cart",[773,1142,805],{"class":794},[773,1144,980],{"class":794},[773,1146,1147],{"class":801}," items",[773,1149,805],{"class":794},[773,1151,1140],{"class":790},[773,1153,1049],{"class":794},[773,1155,1156],{"class":790},"items",[773,1158,1049],{"class":794},[773,1160,1161],{"class":790},"length",[773,1163,1078],{"class":794},[773,1165,1166],{"class":801}," total",[773,1168,805],{"class":794},[773,1170,1140],{"class":790},[773,1172,1049],{"class":794},[773,1174,1175],{"class":790},"total ",[773,1177,867],{"class":794},[773,1179,986],{"class":794},[773,1181,870],{"class":790},[540,1183,1184,1185,1187],{},"If an error is thrown, evlog's ",[567,1186,714],{}," hook captures it automatically and records it on the logger with the status code.",[742,1189,1191],{"id":1190},"_4-request-end","4. Request End",[540,1193,1194],{},"When the response is sent (or an error is thrown), evlog computes:",[1196,1197,1198,1212,1221],"ul",{},[1199,1200,1201,1204,1205,576,1208,1211],"li",{},[592,1202,1203],{},"Status code"," from the response (or from the error's ",[567,1206,1207],{},"status",[567,1209,1210],{},"statusCode",")",[1199,1213,1214,1217,1218],{},[592,1215,1216],{},"Duration"," from ",[567,1219,1220],{},"Date.now() - startTime",[1199,1222,1223,1226,1227,1229,1230,1232,1233],{},[592,1224,1225],{},"Level"," - ",[567,1228,714],{}," if an error was recorded, ",[567,1231,720],{}," if status >= 400, otherwise ",[567,1234,717],{},[540,1236,1237],{},"If an error triggered the emit, the request is marked as already emitted to prevent double-emission in the response hook.",[742,1239,1241,1242,1211],{"id":1240},"_5-tail-sampling-evlogemitkeep","5. Tail Sampling (",[567,1243,1244],{},"evlog:emit:keep",[540,1246,1247,1248,1251,1252,1256],{},"Before the event is sampled, evlog evaluates ",[592,1249,1250],{},"tail sampling"," rules. These run ",[1253,1254,1255],"em",{},"after"," the request completes, so they can inspect the outcome:",[763,1258,1260],{"className":765,"code":1259,"filename":767,"language":768,"meta":769,"style":769},"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",[567,1261,1262,1271,1280,1290,1311,1328,1349,1356,1360],{"__ignoreMap":769},[773,1263,1264,1267,1269],{"class":775,"line":776},[773,1265,995],{"class":1266},"sBMFI",[773,1268,805],{"class":794},[773,1270,834],{"class":794},[773,1272,1273,1276,1278],{"class":775,"line":798},[773,1274,1275],{"class":1266},"  sampling",[773,1277,805],{"class":794},[773,1279,834],{"class":794},[773,1281,1282,1285,1287],{"class":775,"line":826},[773,1283,1284],{"class":1266},"    keep",[773,1286,805],{"class":794},[773,1288,1289],{"class":801}," [\n",[773,1291,1292,1295,1298,1300,1304,1307],{"class":775,"line":837},[773,1293,1294],{"class":794},"      {",[773,1296,1297],{"class":801}," duration",[773,1299,805],{"class":794},[773,1301,1303],{"class":1302},"sbssI"," 1000",[773,1305,1306],{"class":794}," },",[773,1308,1310],{"class":1309},"sHwdD","          \u002F\u002F slow requests\n",[773,1312,1313,1315,1318,1320,1323,1325],{"class":775,"line":858},[773,1314,1294],{"class":794},[773,1316,1317],{"class":801}," status",[773,1319,805],{"class":794},[773,1321,1322],{"class":1302}," 400",[773,1324,1306],{"class":794},[773,1326,1327],{"class":1309},"             \u002F\u002F client\u002Fserver errors\n",[773,1329,1330,1332,1335,1337,1339,1342,1344,1346],{"class":775,"line":864},[773,1331,1294],{"class":794},[773,1333,1334],{"class":801}," path",[773,1336,805],{"class":794},[773,1338,992],{"class":794},[773,1340,1341],{"class":814},"\u002Fapi\u002Fcritical\u002F**",[773,1343,811],{"class":794},[773,1345,1306],{"class":794},[773,1347,1348],{"class":1309}," \u002F\u002F critical paths\n",[773,1350,1351,1354],{"class":775,"line":1099},[773,1352,1353],{"class":801},"    ]",[773,1355,823],{"class":794},[773,1357,1358],{"class":775,"line":1104},[773,1359,861],{"class":794},[773,1361,1362],{"class":775,"line":1127},[773,1363,1364],{"class":794},"}\n",[540,1366,1367,1368,1370],{},"The ",[567,1369,1244],{}," hook also fires, letting you force-keep based on custom business logic:",[763,1372,1375],{"className":765,"code":1373,"filename":1374,"language":768,"meta":769,"style":769},"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",[567,1376,1377,1401,1438,1468,1485,1490,1497],{"__ignoreMap":769},[773,1378,1379,1381,1383,1386,1388,1390,1394,1396,1399],{"class":775,"line":776},[773,1380,780],{"class":779},[773,1382,783],{"class":779},[773,1384,1385],{"class":786}," defineNitroPlugin",[773,1387,791],{"class":790},[773,1389,791],{"class":794},[773,1391,1393],{"class":1392},"sHdIc","nitroApp",[773,1395,1211],{"class":794},[773,1397,1398],{"class":1009}," =>",[773,1400,834],{"class":794},[773,1402,1403,1406,1408,1411,1413,1416,1418,1420,1422,1424,1426,1429,1432,1434,1436],{"class":775,"line":798},[773,1404,1405],{"class":790},"  nitroApp",[773,1407,1049],{"class":794},[773,1409,1410],{"class":790},"hooks",[773,1412,1049],{"class":794},[773,1414,1415],{"class":786},"hook",[773,1417,791],{"class":801},[773,1419,811],{"class":794},[773,1421,1244],{"class":814},[773,1423,811],{"class":794},[773,1425,1078],{"class":794},[773,1427,1428],{"class":794}," (",[773,1430,1431],{"class":1392},"ctx",[773,1433,1211],{"class":794},[773,1435,1398],{"class":1009},[773,1437,834],{"class":794},[773,1439,1440,1443,1445,1447,1449,1452,1454,1457,1460,1463,1466],{"class":775,"line":826},[773,1441,1442],{"class":779},"    if",[773,1444,1428],{"class":801},[773,1446,1431],{"class":790},[773,1448,1049],{"class":794},[773,1450,1451],{"class":790},"context",[773,1453,1049],{"class":794},[773,1455,1456],{"class":790},"user",[773,1458,1459],{"class":794},"?.",[773,1461,1462],{"class":790},"premium",[773,1464,1465],{"class":801},") ",[773,1467,795],{"class":794},[773,1469,1470,1473,1475,1478,1481],{"class":775,"line":837},[773,1471,1472],{"class":790},"      ctx",[773,1474,1049],{"class":794},[773,1476,1477],{"class":790},"shouldKeep",[773,1479,1480],{"class":794}," =",[773,1482,1484],{"class":1483},"sfNiH"," true\n",[773,1486,1487],{"class":775,"line":858},[773,1488,1489],{"class":794},"    }\n",[773,1491,1492,1495],{"class":775,"line":864},[773,1493,1494],{"class":794},"  }",[773,1496,870],{"class":801},[773,1498,1499,1501],{"class":775,"line":1099},[773,1500,867],{"class":794},[773,1502,870],{"class":790},[540,1504,1505,1506,1509,1510,1049],{},"If any rule or hook sets ",[567,1507,1508],{},"shouldKeep = true",", the event ",[592,1511,1512],{},"bypasses head sampling entirely",[742,1514,1516],{"id":1515},"_6-head-sampling","6. Head Sampling",[540,1518,1519],{},"If the event wasn't force-kept by tail sampling, head sampling applies. This is a random coin flip per log level.",[540,1521,1522,1523,1526],{},"By default, all levels are kept at 100% (no sampling). Configure ",[567,1524,1525],{},"sampling.rates"," to reduce volume in production:",[763,1528,1530],{"className":765,"code":1529,"filename":767,"language":768,"meta":769,"style":769},"evlog: {\n  sampling: {\n    rates: { info: 10, warn: 50, debug: 0 },\n  },\n}\n",[567,1531,1532,1540,1548,1588,1592],{"__ignoreMap":769},[773,1533,1534,1536,1538],{"class":775,"line":776},[773,1535,995],{"class":1266},[773,1537,805],{"class":794},[773,1539,834],{"class":794},[773,1541,1542,1544,1546],{"class":775,"line":798},[773,1543,1275],{"class":1266},[773,1545,805],{"class":794},[773,1547,834],{"class":794},[773,1549,1550,1553,1555,1557,1560,1562,1565,1567,1570,1572,1575,1577,1580,1582,1585],{"class":775,"line":826},[773,1551,1552],{"class":1266},"    rates",[773,1554,805],{"class":794},[773,1556,980],{"class":794},[773,1558,1559],{"class":1266}," info",[773,1561,805],{"class":794},[773,1563,1564],{"class":1302}," 10",[773,1566,1078],{"class":794},[773,1568,1569],{"class":1266}," warn",[773,1571,805],{"class":794},[773,1573,1574],{"class":1302}," 50",[773,1576,1078],{"class":794},[773,1578,1579],{"class":1266}," debug",[773,1581,805],{"class":794},[773,1583,1584],{"class":1302}," 0",[773,1586,1587],{"class":794}," },\n",[773,1589,1590],{"class":775,"line":837},[773,1591,861],{"class":794},[773,1593,1594],{"class":775,"line":858},[773,1595,1364],{"class":794},[1196,1597,1598,1604,1610],{},[1199,1599,1600,1603],{},[567,1601,1602],{},"info: 10"," - keep 10% of info-level events",[1199,1605,1606,1609],{},[567,1607,1608],{},"warn: 50"," - keep 50% of warnings",[1199,1611,1612,1614,1615,1618],{},[567,1613,714],{}," defaults to ",[592,1616,1617],{},"100%"," (never sampled out, even if you set a rate)",[540,1620,1621],{},"If the event is sampled out, processing stops entirely: no console output, no enrichment, no drain.",[742,1623,1625],{"id":1624},"_7-emit","7. Emit",[540,1627,1367,1628,1631],{},[567,1629,1630],{},"WideEvent"," object is built from the accumulated context:",[763,1633,1637],{"className":1634,"code":1635,"filename":1630,"language":1636,"meta":769,"style":769},"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",[567,1638,1639,1643,1666,1685,1705,1723,1742,1761,1777,1792,1836,1878],{"__ignoreMap":769},[773,1640,1641],{"class":775,"line":776},[773,1642,795],{"class":794},[773,1644,1645,1648,1651,1654,1656,1659,1662,1664],{"class":775,"line":798},[773,1646,1647],{"class":794},"  \"",[773,1649,1650],{"class":1009},"timestamp",[773,1652,1653],{"class":794},"\"",[773,1655,805],{"class":794},[773,1657,1658],{"class":794}," \"",[773,1660,1661],{"class":814},"2026-01-15T10:30:00.000Z",[773,1663,1653],{"class":794},[773,1665,823],{"class":794},[773,1667,1668,1670,1673,1675,1677,1679,1681,1683],{"class":775,"line":826},[773,1669,1647],{"class":794},[773,1671,1672],{"class":1009},"level",[773,1674,1653],{"class":794},[773,1676,805],{"class":794},[773,1678,1658],{"class":794},[773,1680,717],{"class":814},[773,1682,1653],{"class":794},[773,1684,823],{"class":794},[773,1686,1687,1689,1692,1694,1696,1698,1701,1703],{"class":775,"line":837},[773,1688,1647],{"class":794},[773,1690,1691],{"class":1009},"service",[773,1693,1653],{"class":794},[773,1695,805],{"class":794},[773,1697,1658],{"class":794},[773,1699,1700],{"class":814},"my-app",[773,1702,1653],{"class":794},[773,1704,823],{"class":794},[773,1706,1707,1709,1711,1713,1715,1717,1719,1721],{"class":775,"line":858},[773,1708,1647],{"class":794},[773,1710,902],{"class":1009},[773,1712,1653],{"class":794},[773,1714,805],{"class":794},[773,1716,1658],{"class":794},[773,1718,912],{"class":814},[773,1720,1653],{"class":794},[773,1722,823],{"class":794},[773,1724,1725,1727,1729,1731,1733,1735,1738,1740],{"class":775,"line":864},[773,1726,1647],{"class":794},[773,1728,920],{"class":1009},[773,1730,1653],{"class":794},[773,1732,805],{"class":794},[773,1734,1658],{"class":794},[773,1736,1737],{"class":814},"\u002Fapi\u002Fcheckout",[773,1739,1653],{"class":794},[773,1741,823],{"class":794},[773,1743,1744,1746,1748,1750,1752,1754,1757,1759],{"class":775,"line":1099},[773,1745,1647],{"class":794},[773,1747,930],{"class":1009},[773,1749,1653],{"class":794},[773,1751,805],{"class":794},[773,1753,1658],{"class":794},[773,1755,1756],{"class":814},"abc-123",[773,1758,1653],{"class":794},[773,1760,823],{"class":794},[773,1762,1763,1765,1768,1770,1772,1775],{"class":775,"line":1104},[773,1764,1647],{"class":794},[773,1766,1767],{"class":1009},"duration",[773,1769,1653],{"class":794},[773,1771,805],{"class":794},[773,1773,1774],{"class":1302}," 234",[773,1776,823],{"class":794},[773,1778,1779,1781,1783,1785,1787,1790],{"class":775,"line":1127},[773,1780,1647],{"class":794},[773,1782,1207],{"class":1009},[773,1784,1653],{"class":794},[773,1786,805],{"class":794},[773,1788,1789],{"class":1302}," 200",[773,1791,823],{"class":794},[773,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1813,1816,1818,1820,1823,1825,1827,1829,1832,1834],{"class":775,"line":1794},10,[773,1796,1647],{"class":794},[773,1798,1456],{"class":1009},[773,1800,1653],{"class":794},[773,1802,805],{"class":794},[773,1804,980],{"class":794},[773,1806,1658],{"class":794},[773,1808,1075],{"class":1266},[773,1810,1653],{"class":794},[773,1812,805],{"class":794},[773,1814,1815],{"class":1302}," 1",[773,1817,1078],{"class":794},[773,1819,1658],{"class":794},[773,1821,1822],{"class":1266},"plan",[773,1824,1653],{"class":794},[773,1826,805],{"class":794},[773,1828,1658],{"class":794},[773,1830,1831],{"class":814},"pro",[773,1833,1653],{"class":794},[773,1835,1587],{"class":794},[773,1837,1839,1841,1844,1846,1848,1850,1852,1854,1856,1858,1861,1863,1865,1868,1870,1872,1875],{"class":775,"line":1838},11,[773,1840,1647],{"class":794},[773,1842,1843],{"class":1009},"cart",[773,1845,1653],{"class":794},[773,1847,805],{"class":794},[773,1849,980],{"class":794},[773,1851,1658],{"class":794},[773,1853,1156],{"class":1266},[773,1855,1653],{"class":794},[773,1857,805],{"class":794},[773,1859,1860],{"class":1302}," 3",[773,1862,1078],{"class":794},[773,1864,1658],{"class":794},[773,1866,1867],{"class":1266},"total",[773,1869,1653],{"class":794},[773,1871,805],{"class":794},[773,1873,1874],{"class":1302}," 9999",[773,1876,1877],{"class":794}," }\n",[773,1879,1881],{"class":775,"line":1880},12,[773,1882,1364],{"class":794},[540,1884,1885],{},"The event is printed to the console, pretty-formatted in development and as JSON in production. This is the default behavior, no configuration needed.",[742,1887,1889,1890,1211],{"id":1888},"_8-enrich-evlogenrich","8. Enrich (",[567,1891,1892],{},"evlog:enrich",[540,1894,1895],{},"After emission, enrichers add derived context to the event. Built-in enrichers extract data from request headers:",[552,1897,1898,1910],{},[555,1899,1900],{},[558,1901,1902,1905,1908],{},[561,1903,1904],{},"Enricher",[561,1906,1907],{},"Adds",[561,1909,893],{},[584,1911,1912,1929,1943,1960],{},[558,1913,1914,1917,1923],{},[589,1915,1916],{},"User Agent",[589,1918,1919,1922],{},[567,1920,1921],{},"userAgent"," (browser, OS, device)",[589,1924,1925,1928],{},[567,1926,1927],{},"User-Agent"," header",[558,1930,1931,1934,1940],{},[589,1932,1933],{},"Geo",[589,1935,1936,1939],{},[567,1937,1938],{},"geo"," (country, region, city)",[589,1941,1942],{},"Platform headers (Vercel, Cloudflare)",[558,1944,1945,1948,1954],{},[589,1946,1947],{},"Request Size",[589,1949,1950,1953],{},[567,1951,1952],{},"requestSize"," (request\u002Fresponse bytes)",[589,1955,1956,1959],{},[567,1957,1958],{},"Content-Length"," headers",[558,1961,1962,1965,1971],{},[589,1963,1964],{},"Trace Context",[589,1966,1967,1970],{},[567,1968,1969],{},"traceContext"," (traceId, spanId)",[589,1972,1973,1928],{},[567,1974,1975],{},"traceparent",[763,1977,1980],{"className":765,"code":1978,"filename":1979,"language":768,"meta":769,"style":769},"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",[567,1981,1982,2007,2011,2031,2056,2060,2092,2120,2126],{"__ignoreMap":769},[773,1983,1984,1986,1988,1991,1993,1996,1998,2000,2002,2005],{"class":775,"line":776},[773,1985,977],{"class":779},[773,1987,980],{"class":794},[773,1989,1990],{"class":790}," createUserAgentEnricher",[773,1992,1078],{"class":794},[773,1994,1995],{"class":790}," createGeoEnricher",[773,1997,986],{"class":794},[773,1999,989],{"class":779},[773,2001,992],{"class":794},[773,2003,2004],{"class":814},"evlog\u002Fenrichers",[773,2006,998],{"class":794},[773,2008,2009],{"class":775,"line":798},[773,2010,1004],{"emptyLinePlaceholder":1003},[773,2012,2013,2015,2017,2019,2021,2023,2025,2027,2029],{"class":775,"line":826},[773,2014,780],{"class":779},[773,2016,783],{"class":779},[773,2018,1385],{"class":786},[773,2020,791],{"class":790},[773,2022,791],{"class":794},[773,2024,1393],{"class":1392},[773,2026,1211],{"class":794},[773,2028,1398],{"class":1009},[773,2030,834],{"class":794},[773,2032,2033,2036,2039,2041,2043,2046,2049,2051,2053],{"class":775,"line":837},[773,2034,2035],{"class":1009},"  const",[773,2037,2038],{"class":790}," enrichers",[773,2040,1480],{"class":794},[773,2042,808],{"class":801},[773,2044,2045],{"class":786},"createUserAgentEnricher",[773,2047,2048],{"class":801},"()",[773,2050,1078],{"class":794},[773,2052,1995],{"class":786},[773,2054,2055],{"class":801},"()]\n",[773,2057,2058],{"class":775,"line":858},[773,2059,1004],{"emptyLinePlaceholder":1003},[773,2061,2062,2064,2066,2068,2070,2072,2074,2076,2078,2080,2082,2084,2086,2088,2090],{"class":775,"line":864},[773,2063,1405],{"class":790},[773,2065,1049],{"class":794},[773,2067,1410],{"class":790},[773,2069,1049],{"class":794},[773,2071,1415],{"class":786},[773,2073,791],{"class":801},[773,2075,811],{"class":794},[773,2077,1892],{"class":814},[773,2079,811],{"class":794},[773,2081,1078],{"class":794},[773,2083,1428],{"class":794},[773,2085,1431],{"class":1392},[773,2087,1211],{"class":794},[773,2089,1398],{"class":1009},[773,2091,834],{"class":794},[773,2093,2094,2097,2099,2101,2104,2107,2109,2111,2114,2116,2118],{"class":775,"line":1099},[773,2095,2096],{"class":779},"    for",[773,2098,1428],{"class":801},[773,2100,1010],{"class":1009},[773,2102,2103],{"class":790}," enricher",[773,2105,2106],{"class":794}," of",[773,2108,2038],{"class":790},[773,2110,1465],{"class":801},[773,2112,2113],{"class":786},"enricher",[773,2115,791],{"class":801},[773,2117,1431],{"class":790},[773,2119,870],{"class":801},[773,2121,2122,2124],{"class":775,"line":1104},[773,2123,1494],{"class":794},[773,2125,870],{"class":801},[773,2127,2128,2130],{"class":775,"line":1127},[773,2129,867],{"class":794},[773,2131,870],{"class":790},[540,2133,2134,2135,2138],{},"Enrichers receive the full ",[567,2136,2137],{},"EnrichContext"," with the mutable event, request metadata, safe headers, and response info.",[742,2140,2142,2143,1211],{"id":2141},"_9-drain-evlogdrain","9. Drain (",[567,2144,2145],{},"evlog:drain",[540,2147,2148,2149,2151,2152,2155],{},"The final step sends the enriched event to your observability platform. The ",[567,2150,2145],{}," hook receives a ",[567,2153,2154],{},"DrainContext"," with the complete event:",[763,2157,2160],{"className":765,"code":2158,"filename":2159,"language":768,"meta":769,"style":769},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', createAxiomDrain())\n})\n","server\u002Fplugins\u002Fevlog-drain.ts",[567,2161,2162,2182,2186,2206,2233],{"__ignoreMap":769},[773,2163,2164,2166,2168,2171,2173,2175,2177,2180],{"class":775,"line":776},[773,2165,977],{"class":779},[773,2167,980],{"class":794},[773,2169,2170],{"class":790}," createAxiomDrain",[773,2172,986],{"class":794},[773,2174,989],{"class":779},[773,2176,992],{"class":794},[773,2178,2179],{"class":814},"evlog\u002Faxiom",[773,2181,998],{"class":794},[773,2183,2184],{"class":775,"line":798},[773,2185,1004],{"emptyLinePlaceholder":1003},[773,2187,2188,2190,2192,2194,2196,2198,2200,2202,2204],{"class":775,"line":826},[773,2189,780],{"class":779},[773,2191,783],{"class":779},[773,2193,1385],{"class":786},[773,2195,791],{"class":790},[773,2197,791],{"class":794},[773,2199,1393],{"class":1392},[773,2201,1211],{"class":794},[773,2203,1398],{"class":1009},[773,2205,834],{"class":794},[773,2207,2208,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230],{"class":775,"line":837},[773,2209,1405],{"class":790},[773,2211,1049],{"class":794},[773,2213,1410],{"class":790},[773,2215,1049],{"class":794},[773,2217,1415],{"class":786},[773,2219,791],{"class":801},[773,2221,811],{"class":794},[773,2223,2145],{"class":814},[773,2225,811],{"class":794},[773,2227,1078],{"class":794},[773,2229,2170],{"class":786},[773,2231,2232],{"class":801},"())\n",[773,2234,2235,2237],{"class":775,"line":858},[773,2236,867],{"class":794},[773,2238,870],{"class":790},[540,2240,2241,2242,2245],{},"On platforms with ",[567,2243,2244],{},"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.",[547,2247,2249],{"id":2248},"hook-execution-order","Hook Execution Order",[552,2251,2252,2268],{},[555,2253,2254],{},[558,2255,2256,2259,2262,2265],{},[561,2257,2258],{},"Order",[561,2260,2261],{},"Hook",[561,2263,2264],{},"When",[561,2266,2267],{},"Purpose",[584,2269,2270,2285,2300],{},[558,2271,2272,2275,2279,2282],{},[589,2273,2274],{},"1",[589,2276,2277],{},[567,2278,1244],{},[589,2280,2281],{},"After request ends, before sampling",[589,2283,2284],{},"Force-keep events based on outcome",[558,2286,2287,2290,2294,2297],{},[589,2288,2289],{},"2",[589,2291,2292],{},[567,2293,1892],{},[589,2295,2296],{},"After emit, before drain",[589,2298,2299],{},"Add derived context to the event",[558,2301,2302,2305,2309,2312],{},[589,2303,2304],{},"3",[589,2306,2307],{},[567,2308,2145],{},[589,2310,2311],{},"After enrichment",[589,2313,2314],{},"Send event to external services",[547,2316,2318],{"id":2317},"error-vs-success-path","Error vs Success Path",[540,2320,2321,2322,2325],{},"Both paths converge at the same emit\u002Fenrich\u002Fdrain pipeline. The only difference is ",[1253,2323,2324],{},"when"," the emit is triggered:",[552,2327,2328,2340],{},[555,2329,2330],{},[558,2331,2332,2334,2337],{},[561,2333],{},[561,2335,2336],{},"Success",[561,2338,2339],{},"Error",[584,2341,2342,2362,2380,2396,2417],{},[558,2343,2344,2349,2358],{},[589,2345,2346],{},[592,2347,2348],{},"Trigger",[589,2350,2351,576,2354,2357],{},[567,2352,2353],{},"afterResponse",[567,2355,2356],{},"response"," hook",[589,2359,2360,2357],{},[567,2361,714],{},[558,2363,2364,2368,2376],{},[589,2365,2366],{},[592,2367,1225],{},[589,2369,2370,2372,2373,2375],{},[567,2371,717],{}," (or ",[567,2374,720],{}," if status >= 400)",[589,2377,2378],{},[567,2379,714],{},[558,2381,2382,2387,2390],{},[589,2383,2384],{},[592,2385,2386],{},"Status",[589,2388,2389],{},"From response",[589,2391,2392,2393,2395],{},"From error's ",[567,2394,1207],{}," field (default 500)",[558,2397,2398,2403,2406],{},[589,2399,2400],{},[592,2401,2402],{},"Error context",[589,2404,2405],{},"None",[589,2407,2408,2410,2411,909,2414],{},[567,2409,714],{}," field with message, stack, ",[567,2412,2413],{},"why",[567,2415,2416],{},"fix",[558,2418,2419,2424,2431],{},[589,2420,2421],{},[592,2422,2423],{},"Double-emit guard",[589,2425,2426,2427,2430],{},"Checks ",[567,2428,2429],{},"_evlogEmitted"," flag",[589,2432,2433,2434],{},"Sets ",[567,2435,2436],{},"_evlogEmitted = true",[547,2438,2440],{"id":2439},"simple-logging-pipeline","Simple Logging Pipeline",[540,2442,2443,2444,2446],{},"When using the ",[567,2445,569],{}," singleton, the pipeline is shorter:",[2448,2449,2450,2462,2467],"ol",{},[1199,2451,2452,2455,2456,603,2459],{},[592,2453,2454],{},"Call",": ",[567,2457,2458],{},"log.info({ action: 'deploy' })",[567,2460,2461],{},"log.info('tag', 'message')",[1199,2463,2464,2466],{},[592,2465,640],{},": The event is built and printed immediately",[1199,2468,2469,2471,2472,2475,2476,2479],{},[592,2470,689],{},": If a global ",[567,2473,2474],{},"drain"," was configured via ",[567,2477,2478],{},"initLogger()",", the event is sent to external services",[540,2481,2482,2483,2485,2486,2489],{},"Tagged logs (",[567,2484,2461],{},") are console-only in pretty mode. Object-form logs (",[567,2487,2488],{},"log.info({ ... })",") always flow through the drain pipeline.",[547,2491,2493],{"id":2492},"standalone-wide-event-pipeline","Standalone Wide Event Pipeline",[540,2495,2496,2497,2500],{},"When using ",[567,2498,2499],{},"createLogger()"," outside a framework:",[2448,2502,2503,2510,2526,2534,2542],{},[1199,2504,2505,2455,2507],{},[592,2506,594],{},[567,2508,2509],{},"createLogger({ jobId: 'sync-001' })",[1199,2511,2512,2455,2514,909,2516,909,2519,909,2522,2525],{},[592,2513,616],{},[567,2515,624],{},[567,2517,2518],{},"log.info()",[567,2520,2521],{},"log.warn()",[567,2523,2524],{},"log.error()"," over the operation",[1199,2527,2528,2530,2531,2533],{},[592,2529,640],{},": Manual ",[567,2532,649],{}," call",[1199,2535,2536,2538,2539],{},[592,2537,659],{},": Head sampling applies based on computed level. Tail sampling via ",[567,2540,2541],{},"initLogger({ sampling: { keep: [...] } })",[1199,2543,2544,2471,2546,2548],{},[592,2545,689],{},[567,2547,2474],{}," was configured, the event is sent",[763,2550,2553],{"className":765,"code":2551,"filename":2552,"language":768,"meta":769,"style":769},"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",[567,2554,2555,2579,2597,2601,2610,2633,2646,2671,2677,2681,2711,2748],{"__ignoreMap":769},[773,2556,2557,2559,2561,2564,2566,2569,2571,2573,2575,2577],{"class":775,"line":776},[773,2558,977],{"class":779},[773,2560,980],{"class":794},[773,2562,2563],{"class":790}," initLogger",[773,2565,1078],{"class":794},[773,2567,2568],{"class":790}," createLogger",[773,2570,986],{"class":794},[773,2572,989],{"class":779},[773,2574,992],{"class":794},[773,2576,995],{"class":814},[773,2578,998],{"class":794},[773,2580,2581,2583,2585,2587,2589,2591,2593,2595],{"class":775,"line":798},[773,2582,977],{"class":779},[773,2584,980],{"class":794},[773,2586,2170],{"class":790},[773,2588,986],{"class":794},[773,2590,989],{"class":779},[773,2592,992],{"class":794},[773,2594,2179],{"class":814},[773,2596,998],{"class":794},[773,2598,2599],{"class":775,"line":826},[773,2600,1004],{"emptyLinePlaceholder":1003},[773,2602,2603,2606,2608],{"class":775,"line":837},[773,2604,2605],{"class":786},"initLogger",[773,2607,791],{"class":790},[773,2609,795],{"class":794},[773,2611,2612,2615,2617,2619,2622,2624,2626,2629,2631],{"class":775,"line":858},[773,2613,2614],{"class":801},"  env",[773,2616,805],{"class":794},[773,2618,980],{"class":794},[773,2620,2621],{"class":801}," service",[773,2623,805],{"class":794},[773,2625,992],{"class":794},[773,2627,2628],{"class":814},"worker",[773,2630,811],{"class":794},[773,2632,1587],{"class":794},[773,2634,2635,2638,2640,2642,2644],{"class":775,"line":864},[773,2636,2637],{"class":801},"  drain",[773,2639,805],{"class":794},[773,2641,2170],{"class":786},[773,2643,2048],{"class":790},[773,2645,823],{"class":794},[773,2647,2648,2650,2652,2654,2657,2659,2661,2663,2665,2667,2669],{"class":775,"line":1099},[773,2649,1275],{"class":801},[773,2651,805],{"class":794},[773,2653,980],{"class":794},[773,2655,2656],{"class":801}," rates",[773,2658,805],{"class":794},[773,2660,980],{"class":794},[773,2662,1559],{"class":801},[773,2664,805],{"class":794},[773,2666,1564],{"class":1302},[773,2668,986],{"class":794},[773,2670,1587],{"class":794},[773,2672,2673,2675],{"class":775,"line":1104},[773,2674,867],{"class":794},[773,2676,870],{"class":790},[773,2678,2679],{"class":775,"line":1127},[773,2680,1004],{"emptyLinePlaceholder":1003},[773,2682,2683,2685,2687,2689,2691,2693,2695,2698,2700,2702,2705,2707,2709],{"class":775,"line":1794},[773,2684,1010],{"class":1009},[773,2686,1013],{"class":790},[773,2688,1016],{"class":794},[773,2690,2568],{"class":786},[773,2692,791],{"class":790},[773,2694,1056],{"class":794},[773,2696,2697],{"class":801}," task",[773,2699,805],{"class":794},[773,2701,992],{"class":794},[773,2703,2704],{"class":814},"migrate",[773,2706,811],{"class":794},[773,2708,986],{"class":794},[773,2710,870],{"class":790},[773,2712,2713,2715,2717,2719,2721,2723,2726,2728,2731,2733,2735,2737,2739,2742,2744,2746],{"class":775,"line":1838},[773,2714,569],{"class":790},[773,2716,1049],{"class":794},[773,2718,711],{"class":786},[773,2720,791],{"class":790},[773,2722,1056],{"class":794},[773,2724,2725],{"class":801}," records",[773,2727,805],{"class":794},[773,2729,2730],{"class":1302}," 500",[773,2732,1078],{"class":794},[773,2734,1317],{"class":801},[773,2736,805],{"class":794},[773,2738,992],{"class":794},[773,2740,2741],{"class":814},"complete",[773,2743,811],{"class":794},[773,2745,986],{"class":794},[773,2747,870],{"class":790},[773,2749,2750,2752,2754,2756],{"class":775,"line":1880},[773,2751,569],{"class":790},[773,2753,1049],{"class":794},[773,2755,703],{"class":786},[773,2757,2758],{"class":790},"()\n",[547,2760,2762],{"id":2761},"next-steps","Next Steps",[1196,2764,2765,2770,2775,2780],{},[1199,2766,2767,2769],{},[729,2768,46],{"href":47}," - Design effective wide events",[1199,2771,2772,2774],{},[729,2773,61],{"href":62}," - Configure head and tail sampling",[1199,2776,2777,2779],{},[729,2778,138],{"href":143}," - Send events to external platforms",[1199,2781,2782,2784],{},[729,2783,431],{"href":432}," - Add derived context automatically",[2786,2787,2788],"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":769,"searchDepth":798,"depth":798,"links":2790},[2791,2792,2806,2807,2808,2809,2810],{"id":549,"depth":798,"text":550},{"id":736,"depth":798,"text":737,"children":2793},[2794,2795,2796,2797,2798,2800,2801,2802,2804],{"id":744,"depth":826,"text":745},{"id":873,"depth":826,"text":874},{"id":959,"depth":826,"text":960},{"id":1190,"depth":826,"text":1191},{"id":1240,"depth":826,"text":2799},"5. Tail Sampling (evlog:emit:keep)",{"id":1515,"depth":826,"text":1516},{"id":1624,"depth":826,"text":1625},{"id":1888,"depth":826,"text":2803},"8. Enrich (evlog:enrich)",{"id":2141,"depth":826,"text":2805},"9. Drain (evlog:drain)",{"id":2248,"depth":798,"text":2249},{"id":2317,"depth":798,"text":2318},{"id":2439,"depth":798,"text":2440},{"id":2492,"depth":798,"text":2493},{"id":2761,"depth":798,"text":2762},"Understand the full lifecycle of an evlog event, from creation to drain. Covers all three modes (simple logging, wide events, request logging), sampling, enrichment, and delivery.","md",[2814,2817],{"label":46,"icon":49,"to":47,"color":2815,"variant":2816},"neutral","subtle",{"label":61,"icon":64,"to":62,"color":2815,"variant":2816},{},{"icon":59},{"title":56,"description":2811},"eqBQMD9EeomLQwgktVaxfAcMwqoNNm02tafGANzcER4",[2823,2825],{"title":51,"path":52,"stem":53,"description":2824,"icon":54,"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":61,"path":62,"stem":63,"description":2826,"icon":64,"children":-1},"Control log volume with two-tier sampling. Head sampling drops noise by level, tail sampling rescues critical events based on outcome. Never miss errors, slow requests, or critical paths.",1786792892004]