[{"data":1,"prerenderedAt":2826},["ShallowReactive",2],{"navigation_docs":3,"-learn-lifecycle":534,"-learn-lifecycle-surround":2821},[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":2810,"extension":2811,"links":2812,"meta":2817,"navigation":2818,"path":57,"seo":2819,"stem":58,"__hash__":2820},"docs\u002F2.learn\u002F4.lifecycle.md",{"type":537,"value":538,"toc":2788},"minimark",[539,543,546,551,696,734,738,741,746,756,762,871,875,882,951,957,961,967,1181,1187,1191,1194,1234,1237,1244,1256,1364,1370,1502,1512,1516,1519,1526,1595,1618,1621,1625,1631,1882,1885,1892,1895,1975,2131,2138,2145,2155,2238,2245,2249,2314,2318,2325,2436,2440,2446,2479,2489,2493,2500,2548,2758,2762,2784],[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","Wide events — After emit",".",[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,1096,1101,1124],{"__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,1049,1051,1053,1056,1059,1061,1063,1066,1068,1070,1072,1075,1078,1081,1083,1085,1087,1090,1092,1094],{"class":775,"line":864},[773,1046,569],{"class":790},[773,1048,733],{"class":794},[773,1050,711],{"class":786},[773,1052,791],{"class":790},[773,1054,1055],{"class":794},"{",[773,1057,1058],{"class":801}," user",[773,1060,805],{"class":794},[773,1062,980],{"class":794},[773,1064,1065],{"class":801}," id",[773,1067,805],{"class":794},[773,1069,1058],{"class":790},[773,1071,733],{"class":794},[773,1073,1074],{"class":790},"id",[773,1076,1077],{"class":794},",",[773,1079,1080],{"class":801}," plan",[773,1082,805],{"class":794},[773,1084,1058],{"class":790},[773,1086,733],{"class":794},[773,1088,1089],{"class":790},"plan ",[773,1091,867],{"class":794},[773,1093,986],{"class":794},[773,1095,870],{"class":790},[773,1097,1099],{"class":775,"line":1098},7,[773,1100,1004],{"emptyLinePlaceholder":1003},[773,1102,1104,1106,1109,1111,1113,1116,1119,1121],{"class":775,"line":1103},8,[773,1105,1010],{"class":1009},[773,1107,1108],{"class":790}," cart ",[773,1110,1016],{"class":794},[773,1112,1037],{"class":779},[773,1114,1115],{"class":786}," getCart",[773,1117,1118],{"class":790},"(user",[773,1120,733],{"class":794},[773,1122,1123],{"class":790},"id)\n",[773,1125,1127,1129,1131,1133,1135,1137,1140,1142,1144,1147,1149,1151,1153,1156,1158,1161,1163,1166,1168,1170,1172,1175,1177,1179],{"class":775,"line":1126},9,[773,1128,569],{"class":790},[773,1130,733],{"class":794},[773,1132,711],{"class":786},[773,1134,791],{"class":790},[773,1136,1055],{"class":794},[773,1138,1139],{"class":801}," cart",[773,1141,805],{"class":794},[773,1143,980],{"class":794},[773,1145,1146],{"class":801}," items",[773,1148,805],{"class":794},[773,1150,1139],{"class":790},[773,1152,733],{"class":794},[773,1154,1155],{"class":790},"items",[773,1157,733],{"class":794},[773,1159,1160],{"class":790},"length",[773,1162,1077],{"class":794},[773,1164,1165],{"class":801}," total",[773,1167,805],{"class":794},[773,1169,1139],{"class":790},[773,1171,733],{"class":794},[773,1173,1174],{"class":790},"total ",[773,1176,867],{"class":794},[773,1178,986],{"class":794},[773,1180,870],{"class":790},[540,1182,1183,1184,1186],{},"If an error is thrown, evlog's ",[567,1185,714],{}," hook captures it automatically and records it on the logger with the status code.",[742,1188,1190],{"id":1189},"_4-request-end","4. Request End",[540,1192,1193],{},"When the response is sent (or an error is thrown), evlog computes:",[1195,1196,1197,1211,1220],"ul",{},[1198,1199,1200,1203,1204,576,1207,1210],"li",{},[592,1201,1202],{},"Status code"," from the response (or from the error's ",[567,1205,1206],{},"status",[567,1208,1209],{},"statusCode",")",[1198,1212,1213,1216,1217],{},[592,1214,1215],{},"Duration"," from ",[567,1218,1219],{},"Date.now() - startTime",[1198,1221,1222,1225,1226,1228,1229,1231,1232],{},[592,1223,1224],{},"Level"," - ",[567,1227,714],{}," if an error was recorded, ",[567,1230,720],{}," if status >= 400, otherwise ",[567,1233,717],{},[540,1235,1236],{},"If an error triggered the emit, the request is marked as already emitted to prevent double-emission in the response hook.",[742,1238,1240,1241,1210],{"id":1239},"_5-tail-sampling-evlogemitkeep","5. Tail Sampling (",[567,1242,1243],{},"evlog:emit:keep",[540,1245,1246,1247,1250,1251,1255],{},"Before the event is sampled, evlog evaluates ",[592,1248,1249],{},"tail sampling"," rules. These run ",[1252,1253,1254],"em",{},"after"," the request completes, so they can inspect the outcome:",[763,1257,1259],{"className":765,"code":1258,"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,1260,1261,1270,1279,1289,1310,1327,1348,1355,1359],{"__ignoreMap":769},[773,1262,1263,1266,1268],{"class":775,"line":776},[773,1264,995],{"class":1265},"sBMFI",[773,1267,805],{"class":794},[773,1269,834],{"class":794},[773,1271,1272,1275,1277],{"class":775,"line":798},[773,1273,1274],{"class":1265},"  sampling",[773,1276,805],{"class":794},[773,1278,834],{"class":794},[773,1280,1281,1284,1286],{"class":775,"line":826},[773,1282,1283],{"class":1265},"    keep",[773,1285,805],{"class":794},[773,1287,1288],{"class":801}," [\n",[773,1290,1291,1294,1297,1299,1303,1306],{"class":775,"line":837},[773,1292,1293],{"class":794},"      {",[773,1295,1296],{"class":801}," duration",[773,1298,805],{"class":794},[773,1300,1302],{"class":1301},"sbssI"," 1000",[773,1304,1305],{"class":794}," },",[773,1307,1309],{"class":1308},"sHwdD","          \u002F\u002F slow requests\n",[773,1311,1312,1314,1317,1319,1322,1324],{"class":775,"line":858},[773,1313,1293],{"class":794},[773,1315,1316],{"class":801}," status",[773,1318,805],{"class":794},[773,1320,1321],{"class":1301}," 400",[773,1323,1305],{"class":794},[773,1325,1326],{"class":1308},"             \u002F\u002F client\u002Fserver errors\n",[773,1328,1329,1331,1334,1336,1338,1341,1343,1345],{"class":775,"line":864},[773,1330,1293],{"class":794},[773,1332,1333],{"class":801}," path",[773,1335,805],{"class":794},[773,1337,992],{"class":794},[773,1339,1340],{"class":814},"\u002Fapi\u002Fcritical\u002F**",[773,1342,811],{"class":794},[773,1344,1305],{"class":794},[773,1346,1347],{"class":1308}," \u002F\u002F critical paths\n",[773,1349,1350,1353],{"class":775,"line":1098},[773,1351,1352],{"class":801},"    ]",[773,1354,823],{"class":794},[773,1356,1357],{"class":775,"line":1103},[773,1358,861],{"class":794},[773,1360,1361],{"class":775,"line":1126},[773,1362,1363],{"class":794},"}\n",[540,1365,1366,1367,1369],{},"The ",[567,1368,1243],{}," hook also fires, letting you force-keep based on custom business logic:",[763,1371,1374],{"className":765,"code":1372,"filename":1373,"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,1375,1376,1400,1437,1467,1484,1489,1496],{"__ignoreMap":769},[773,1377,1378,1380,1382,1385,1387,1389,1393,1395,1398],{"class":775,"line":776},[773,1379,780],{"class":779},[773,1381,783],{"class":779},[773,1383,1384],{"class":786}," defineNitroPlugin",[773,1386,791],{"class":790},[773,1388,791],{"class":794},[773,1390,1392],{"class":1391},"sHdIc","nitroApp",[773,1394,1210],{"class":794},[773,1396,1397],{"class":1009}," =>",[773,1399,834],{"class":794},[773,1401,1402,1405,1407,1410,1412,1415,1417,1419,1421,1423,1425,1428,1431,1433,1435],{"class":775,"line":798},[773,1403,1404],{"class":790},"  nitroApp",[773,1406,733],{"class":794},[773,1408,1409],{"class":790},"hooks",[773,1411,733],{"class":794},[773,1413,1414],{"class":786},"hook",[773,1416,791],{"class":801},[773,1418,811],{"class":794},[773,1420,1243],{"class":814},[773,1422,811],{"class":794},[773,1424,1077],{"class":794},[773,1426,1427],{"class":794}," (",[773,1429,1430],{"class":1391},"ctx",[773,1432,1210],{"class":794},[773,1434,1397],{"class":1009},[773,1436,834],{"class":794},[773,1438,1439,1442,1444,1446,1448,1451,1453,1456,1459,1462,1465],{"class":775,"line":826},[773,1440,1441],{"class":779},"    if",[773,1443,1427],{"class":801},[773,1445,1430],{"class":790},[773,1447,733],{"class":794},[773,1449,1450],{"class":790},"context",[773,1452,733],{"class":794},[773,1454,1455],{"class":790},"user",[773,1457,1458],{"class":794},"?.",[773,1460,1461],{"class":790},"premium",[773,1463,1464],{"class":801},") ",[773,1466,795],{"class":794},[773,1468,1469,1472,1474,1477,1480],{"class":775,"line":837},[773,1470,1471],{"class":790},"      ctx",[773,1473,733],{"class":794},[773,1475,1476],{"class":790},"shouldKeep",[773,1478,1479],{"class":794}," =",[773,1481,1483],{"class":1482},"sfNiH"," true\n",[773,1485,1486],{"class":775,"line":858},[773,1487,1488],{"class":794},"    }\n",[773,1490,1491,1494],{"class":775,"line":864},[773,1492,1493],{"class":794},"  }",[773,1495,870],{"class":801},[773,1497,1498,1500],{"class":775,"line":1098},[773,1499,867],{"class":794},[773,1501,870],{"class":790},[540,1503,1504,1505,1508,1509,733],{},"If any rule or hook sets ",[567,1506,1507],{},"shouldKeep = true",", the event ",[592,1510,1511],{},"bypasses head sampling entirely",[742,1513,1515],{"id":1514},"_6-head-sampling","6. Head Sampling",[540,1517,1518],{},"If the event wasn't force-kept by tail sampling, head sampling applies. This is a random coin flip per log level.",[540,1520,1521,1522,1525],{},"By default, all levels are kept at 100% (no sampling). Configure ",[567,1523,1524],{},"sampling.rates"," to reduce volume in production:",[763,1527,1529],{"className":765,"code":1528,"filename":767,"language":768,"meta":769,"style":769},"evlog: {\n  sampling: {\n    rates: { info: 10, warn: 50, debug: 0 },\n  },\n}\n",[567,1530,1531,1539,1547,1587,1591],{"__ignoreMap":769},[773,1532,1533,1535,1537],{"class":775,"line":776},[773,1534,995],{"class":1265},[773,1536,805],{"class":794},[773,1538,834],{"class":794},[773,1540,1541,1543,1545],{"class":775,"line":798},[773,1542,1274],{"class":1265},[773,1544,805],{"class":794},[773,1546,834],{"class":794},[773,1548,1549,1552,1554,1556,1559,1561,1564,1566,1569,1571,1574,1576,1579,1581,1584],{"class":775,"line":826},[773,1550,1551],{"class":1265},"    rates",[773,1553,805],{"class":794},[773,1555,980],{"class":794},[773,1557,1558],{"class":1265}," info",[773,1560,805],{"class":794},[773,1562,1563],{"class":1301}," 10",[773,1565,1077],{"class":794},[773,1567,1568],{"class":1265}," warn",[773,1570,805],{"class":794},[773,1572,1573],{"class":1301}," 50",[773,1575,1077],{"class":794},[773,1577,1578],{"class":1265}," debug",[773,1580,805],{"class":794},[773,1582,1583],{"class":1301}," 0",[773,1585,1586],{"class":794}," },\n",[773,1588,1589],{"class":775,"line":837},[773,1590,861],{"class":794},[773,1592,1593],{"class":775,"line":858},[773,1594,1363],{"class":794},[1195,1596,1597,1603,1609],{},[1198,1598,1599,1602],{},[567,1600,1601],{},"info: 10"," - keep 10% of info-level events",[1198,1604,1605,1608],{},[567,1606,1607],{},"warn: 50"," - keep 50% of warnings",[1198,1610,1611,1613,1614,1617],{},[567,1612,714],{}," defaults to ",[592,1615,1616],{},"100%"," (never sampled out, even if you set a rate)",[540,1619,1620],{},"If the event is sampled out, processing stops entirely: no console output, no enrichment, no drain.",[742,1622,1624],{"id":1623},"_7-emit","7. Emit",[540,1626,1366,1627,1630],{},[567,1628,1629],{},"WideEvent"," object is built from the accumulated context:",[763,1632,1636],{"className":1633,"code":1634,"filename":1629,"language":1635,"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,1637,1638,1642,1665,1684,1704,1722,1741,1760,1776,1791,1835,1877],{"__ignoreMap":769},[773,1639,1640],{"class":775,"line":776},[773,1641,795],{"class":794},[773,1643,1644,1647,1650,1653,1655,1658,1661,1663],{"class":775,"line":798},[773,1645,1646],{"class":794},"  \"",[773,1648,1649],{"class":1009},"timestamp",[773,1651,1652],{"class":794},"\"",[773,1654,805],{"class":794},[773,1656,1657],{"class":794}," \"",[773,1659,1660],{"class":814},"2026-01-15T10:30:00.000Z",[773,1662,1652],{"class":794},[773,1664,823],{"class":794},[773,1666,1667,1669,1672,1674,1676,1678,1680,1682],{"class":775,"line":826},[773,1668,1646],{"class":794},[773,1670,1671],{"class":1009},"level",[773,1673,1652],{"class":794},[773,1675,805],{"class":794},[773,1677,1657],{"class":794},[773,1679,717],{"class":814},[773,1681,1652],{"class":794},[773,1683,823],{"class":794},[773,1685,1686,1688,1691,1693,1695,1697,1700,1702],{"class":775,"line":837},[773,1687,1646],{"class":794},[773,1689,1690],{"class":1009},"service",[773,1692,1652],{"class":794},[773,1694,805],{"class":794},[773,1696,1657],{"class":794},[773,1698,1699],{"class":814},"my-app",[773,1701,1652],{"class":794},[773,1703,823],{"class":794},[773,1705,1706,1708,1710,1712,1714,1716,1718,1720],{"class":775,"line":858},[773,1707,1646],{"class":794},[773,1709,902],{"class":1009},[773,1711,1652],{"class":794},[773,1713,805],{"class":794},[773,1715,1657],{"class":794},[773,1717,912],{"class":814},[773,1719,1652],{"class":794},[773,1721,823],{"class":794},[773,1723,1724,1726,1728,1730,1732,1734,1737,1739],{"class":775,"line":864},[773,1725,1646],{"class":794},[773,1727,920],{"class":1009},[773,1729,1652],{"class":794},[773,1731,805],{"class":794},[773,1733,1657],{"class":794},[773,1735,1736],{"class":814},"\u002Fapi\u002Fcheckout",[773,1738,1652],{"class":794},[773,1740,823],{"class":794},[773,1742,1743,1745,1747,1749,1751,1753,1756,1758],{"class":775,"line":1098},[773,1744,1646],{"class":794},[773,1746,930],{"class":1009},[773,1748,1652],{"class":794},[773,1750,805],{"class":794},[773,1752,1657],{"class":794},[773,1754,1755],{"class":814},"abc-123",[773,1757,1652],{"class":794},[773,1759,823],{"class":794},[773,1761,1762,1764,1767,1769,1771,1774],{"class":775,"line":1103},[773,1763,1646],{"class":794},[773,1765,1766],{"class":1009},"duration",[773,1768,1652],{"class":794},[773,1770,805],{"class":794},[773,1772,1773],{"class":1301}," 234",[773,1775,823],{"class":794},[773,1777,1778,1780,1782,1784,1786,1789],{"class":775,"line":1126},[773,1779,1646],{"class":794},[773,1781,1206],{"class":1009},[773,1783,1652],{"class":794},[773,1785,805],{"class":794},[773,1787,1788],{"class":1301}," 200",[773,1790,823],{"class":794},[773,1792,1794,1796,1798,1800,1802,1804,1806,1808,1810,1812,1815,1817,1819,1822,1824,1826,1828,1831,1833],{"class":775,"line":1793},10,[773,1795,1646],{"class":794},[773,1797,1455],{"class":1009},[773,1799,1652],{"class":794},[773,1801,805],{"class":794},[773,1803,980],{"class":794},[773,1805,1657],{"class":794},[773,1807,1074],{"class":1265},[773,1809,1652],{"class":794},[773,1811,805],{"class":794},[773,1813,1814],{"class":1301}," 1",[773,1816,1077],{"class":794},[773,1818,1657],{"class":794},[773,1820,1821],{"class":1265},"plan",[773,1823,1652],{"class":794},[773,1825,805],{"class":794},[773,1827,1657],{"class":794},[773,1829,1830],{"class":814},"pro",[773,1832,1652],{"class":794},[773,1834,1586],{"class":794},[773,1836,1838,1840,1843,1845,1847,1849,1851,1853,1855,1857,1860,1862,1864,1867,1869,1871,1874],{"class":775,"line":1837},11,[773,1839,1646],{"class":794},[773,1841,1842],{"class":1009},"cart",[773,1844,1652],{"class":794},[773,1846,805],{"class":794},[773,1848,980],{"class":794},[773,1850,1657],{"class":794},[773,1852,1155],{"class":1265},[773,1854,1652],{"class":794},[773,1856,805],{"class":794},[773,1858,1859],{"class":1301}," 3",[773,1861,1077],{"class":794},[773,1863,1657],{"class":794},[773,1865,1866],{"class":1265},"total",[773,1868,1652],{"class":794},[773,1870,805],{"class":794},[773,1872,1873],{"class":1301}," 9999",[773,1875,1876],{"class":794}," }\n",[773,1878,1880],{"class":775,"line":1879},12,[773,1881,1363],{"class":794},[540,1883,1884],{},"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,1886,1888,1889,1210],{"id":1887},"_8-enrich-evlogenrich","8. Enrich (",[567,1890,1891],{},"evlog:enrich",[540,1893,1894],{},"After emission, enrichers add derived context to the event. Built-in enrichers extract data from request headers:",[552,1896,1897,1909],{},[555,1898,1899],{},[558,1900,1901,1904,1907],{},[561,1902,1903],{},"Enricher",[561,1905,1906],{},"Adds",[561,1908,893],{},[584,1910,1911,1928,1942,1959],{},[558,1912,1913,1916,1922],{},[589,1914,1915],{},"User Agent",[589,1917,1918,1921],{},[567,1919,1920],{},"userAgent"," (browser, OS, device)",[589,1923,1924,1927],{},[567,1925,1926],{},"User-Agent"," header",[558,1929,1930,1933,1939],{},[589,1931,1932],{},"Geo",[589,1934,1935,1938],{},[567,1936,1937],{},"geo"," (country, region, city)",[589,1940,1941],{},"Platform headers (Vercel, Cloudflare)",[558,1943,1944,1947,1953],{},[589,1945,1946],{},"Request Size",[589,1948,1949,1952],{},[567,1950,1951],{},"requestSize"," (request\u002Fresponse bytes)",[589,1954,1955,1958],{},[567,1956,1957],{},"Content-Length"," headers",[558,1960,1961,1964,1970],{},[589,1962,1963],{},"Trace Context",[589,1965,1966,1969],{},[567,1967,1968],{},"traceContext"," (traceId, spanId)",[589,1971,1972,1927],{},[567,1973,1974],{},"traceparent",[763,1976,1979],{"className":765,"code":1977,"filename":1978,"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,1980,1981,2006,2010,2030,2055,2059,2091,2119,2125],{"__ignoreMap":769},[773,1982,1983,1985,1987,1990,1992,1995,1997,1999,2001,2004],{"class":775,"line":776},[773,1984,977],{"class":779},[773,1986,980],{"class":794},[773,1988,1989],{"class":790}," createUserAgentEnricher",[773,1991,1077],{"class":794},[773,1993,1994],{"class":790}," createGeoEnricher",[773,1996,986],{"class":794},[773,1998,989],{"class":779},[773,2000,992],{"class":794},[773,2002,2003],{"class":814},"evlog\u002Fenrichers",[773,2005,998],{"class":794},[773,2007,2008],{"class":775,"line":798},[773,2009,1004],{"emptyLinePlaceholder":1003},[773,2011,2012,2014,2016,2018,2020,2022,2024,2026,2028],{"class":775,"line":826},[773,2013,780],{"class":779},[773,2015,783],{"class":779},[773,2017,1384],{"class":786},[773,2019,791],{"class":790},[773,2021,791],{"class":794},[773,2023,1392],{"class":1391},[773,2025,1210],{"class":794},[773,2027,1397],{"class":1009},[773,2029,834],{"class":794},[773,2031,2032,2035,2038,2040,2042,2045,2048,2050,2052],{"class":775,"line":837},[773,2033,2034],{"class":1009},"  const",[773,2036,2037],{"class":790}," enrichers",[773,2039,1479],{"class":794},[773,2041,808],{"class":801},[773,2043,2044],{"class":786},"createUserAgentEnricher",[773,2046,2047],{"class":801},"()",[773,2049,1077],{"class":794},[773,2051,1994],{"class":786},[773,2053,2054],{"class":801},"()]\n",[773,2056,2057],{"class":775,"line":858},[773,2058,1004],{"emptyLinePlaceholder":1003},[773,2060,2061,2063,2065,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2087,2089],{"class":775,"line":864},[773,2062,1404],{"class":790},[773,2064,733],{"class":794},[773,2066,1409],{"class":790},[773,2068,733],{"class":794},[773,2070,1414],{"class":786},[773,2072,791],{"class":801},[773,2074,811],{"class":794},[773,2076,1891],{"class":814},[773,2078,811],{"class":794},[773,2080,1077],{"class":794},[773,2082,1427],{"class":794},[773,2084,1430],{"class":1391},[773,2086,1210],{"class":794},[773,2088,1397],{"class":1009},[773,2090,834],{"class":794},[773,2092,2093,2096,2098,2100,2103,2106,2108,2110,2113,2115,2117],{"class":775,"line":1098},[773,2094,2095],{"class":779},"    for",[773,2097,1427],{"class":801},[773,2099,1010],{"class":1009},[773,2101,2102],{"class":790}," enricher",[773,2104,2105],{"class":794}," of",[773,2107,2037],{"class":790},[773,2109,1464],{"class":801},[773,2111,2112],{"class":786},"enricher",[773,2114,791],{"class":801},[773,2116,1430],{"class":790},[773,2118,870],{"class":801},[773,2120,2121,2123],{"class":775,"line":1103},[773,2122,1493],{"class":794},[773,2124,870],{"class":801},[773,2126,2127,2129],{"class":775,"line":1126},[773,2128,867],{"class":794},[773,2130,870],{"class":790},[540,2132,2133,2134,2137],{},"Enrichers receive the full ",[567,2135,2136],{},"EnrichContext"," with the mutable event, request metadata, safe headers, and response info.",[742,2139,2141,2142,1210],{"id":2140},"_9-drain-evlogdrain","9. Drain (",[567,2143,2144],{},"evlog:drain",[540,2146,2147,2148,2150,2151,2154],{},"The final step sends the enriched event to your observability platform. The ",[567,2149,2144],{}," hook receives a ",[567,2152,2153],{},"DrainContext"," with the complete event:",[763,2156,2159],{"className":765,"code":2157,"filename":2158,"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,2160,2161,2181,2185,2205,2232],{"__ignoreMap":769},[773,2162,2163,2165,2167,2170,2172,2174,2176,2179],{"class":775,"line":776},[773,2164,977],{"class":779},[773,2166,980],{"class":794},[773,2168,2169],{"class":790}," createAxiomDrain",[773,2171,986],{"class":794},[773,2173,989],{"class":779},[773,2175,992],{"class":794},[773,2177,2178],{"class":814},"evlog\u002Faxiom",[773,2180,998],{"class":794},[773,2182,2183],{"class":775,"line":798},[773,2184,1004],{"emptyLinePlaceholder":1003},[773,2186,2187,2189,2191,2193,2195,2197,2199,2201,2203],{"class":775,"line":826},[773,2188,780],{"class":779},[773,2190,783],{"class":779},[773,2192,1384],{"class":786},[773,2194,791],{"class":790},[773,2196,791],{"class":794},[773,2198,1392],{"class":1391},[773,2200,1210],{"class":794},[773,2202,1397],{"class":1009},[773,2204,834],{"class":794},[773,2206,2207,2209,2211,2213,2215,2217,2219,2221,2223,2225,2227,2229],{"class":775,"line":837},[773,2208,1404],{"class":790},[773,2210,733],{"class":794},[773,2212,1409],{"class":790},[773,2214,733],{"class":794},[773,2216,1414],{"class":786},[773,2218,791],{"class":801},[773,2220,811],{"class":794},[773,2222,2144],{"class":814},[773,2224,811],{"class":794},[773,2226,1077],{"class":794},[773,2228,2169],{"class":786},[773,2230,2231],{"class":801},"())\n",[773,2233,2234,2236],{"class":775,"line":858},[773,2235,867],{"class":794},[773,2237,870],{"class":790},[540,2239,2240,2241,2244],{},"On platforms with ",[567,2242,2243],{},"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,2246,2248],{"id":2247},"hook-execution-order","Hook Execution Order",[552,2250,2251,2267],{},[555,2252,2253],{},[558,2254,2255,2258,2261,2264],{},[561,2256,2257],{},"Order",[561,2259,2260],{},"Hook",[561,2262,2263],{},"When",[561,2265,2266],{},"Purpose",[584,2268,2269,2284,2299],{},[558,2270,2271,2274,2278,2281],{},[589,2272,2273],{},"1",[589,2275,2276],{},[567,2277,1243],{},[589,2279,2280],{},"After request ends, before sampling",[589,2282,2283],{},"Force-keep events based on outcome",[558,2285,2286,2289,2293,2296],{},[589,2287,2288],{},"2",[589,2290,2291],{},[567,2292,1891],{},[589,2294,2295],{},"After emit, before drain",[589,2297,2298],{},"Add derived context to the event",[558,2300,2301,2304,2308,2311],{},[589,2302,2303],{},"3",[589,2305,2306],{},[567,2307,2144],{},[589,2309,2310],{},"After enrichment",[589,2312,2313],{},"Send event to external services",[547,2315,2317],{"id":2316},"error-vs-success-path","Error vs Success Path",[540,2319,2320,2321,2324],{},"Both paths converge at the same emit\u002Fenrich\u002Fdrain pipeline. The only difference is ",[1252,2322,2323],{},"when"," the emit is triggered:",[552,2326,2327,2339],{},[555,2328,2329],{},[558,2330,2331,2333,2336],{},[561,2332],{},[561,2334,2335],{},"Success",[561,2337,2338],{},"Error",[584,2340,2341,2361,2379,2395,2416],{},[558,2342,2343,2348,2357],{},[589,2344,2345],{},[592,2346,2347],{},"Trigger",[589,2349,2350,576,2353,2356],{},[567,2351,2352],{},"afterResponse",[567,2354,2355],{},"response"," hook",[589,2358,2359,2356],{},[567,2360,714],{},[558,2362,2363,2367,2375],{},[589,2364,2365],{},[592,2366,1224],{},[589,2368,2369,2371,2372,2374],{},[567,2370,717],{}," (or ",[567,2373,720],{}," if status >= 400)",[589,2376,2377],{},[567,2378,714],{},[558,2380,2381,2386,2389],{},[589,2382,2383],{},[592,2384,2385],{},"Status",[589,2387,2388],{},"From response",[589,2390,2391,2392,2394],{},"From error's ",[567,2393,1206],{}," field (default 500)",[558,2396,2397,2402,2405],{},[589,2398,2399],{},[592,2400,2401],{},"Error context",[589,2403,2404],{},"None",[589,2406,2407,2409,2410,909,2413],{},[567,2408,714],{}," field with message, stack, ",[567,2411,2412],{},"why",[567,2414,2415],{},"fix",[558,2417,2418,2423,2430],{},[589,2419,2420],{},[592,2421,2422],{},"Double-emit guard",[589,2424,2425,2426,2429],{},"Checks ",[567,2427,2428],{},"_evlogEmitted"," flag",[589,2431,2432,2433],{},"Sets ",[567,2434,2435],{},"_evlogEmitted = true",[547,2437,2439],{"id":2438},"simple-logging-pipeline","Simple Logging Pipeline",[540,2441,2442,2443,2445],{},"When using the ",[567,2444,569],{}," singleton, the pipeline is shorter:",[2447,2448,2449,2461,2466],"ol",{},[1198,2450,2451,2454,2455,603,2458],{},[592,2452,2453],{},"Call",": ",[567,2456,2457],{},"log.info({ action: 'deploy' })",[567,2459,2460],{},"log.info('tag', 'message')",[1198,2462,2463,2465],{},[592,2464,640],{},": The event is built and printed immediately",[1198,2467,2468,2470,2471,2474,2475,2478],{},[592,2469,689],{},": If a global ",[567,2472,2473],{},"drain"," was configured via ",[567,2476,2477],{},"initLogger()",", the event is sent to external services",[540,2480,2481,2482,2484,2485,2488],{},"Tagged logs (",[567,2483,2460],{},") are console-only in pretty mode. Object-form logs (",[567,2486,2487],{},"log.info({ ... })",") always flow through the drain pipeline.",[547,2490,2492],{"id":2491},"standalone-wide-event-pipeline","Standalone Wide Event Pipeline",[540,2494,2495,2496,2499],{},"When using ",[567,2497,2498],{},"createLogger()"," outside a framework:",[2447,2501,2502,2509,2525,2533,2541],{},[1198,2503,2504,2454,2506],{},[592,2505,594],{},[567,2507,2508],{},"createLogger({ jobId: 'sync-001' })",[1198,2510,2511,2454,2513,909,2515,909,2518,909,2521,2524],{},[592,2512,616],{},[567,2514,624],{},[567,2516,2517],{},"log.info()",[567,2519,2520],{},"log.warn()",[567,2522,2523],{},"log.error()"," over the operation",[1198,2526,2527,2529,2530,2532],{},[592,2528,640],{},": Manual ",[567,2531,649],{}," call",[1198,2534,2535,2537,2538],{},[592,2536,659],{},": Head sampling applies based on computed level. Tail sampling via ",[567,2539,2540],{},"initLogger({ sampling: { keep: [...] } })",[1198,2542,2543,2470,2545,2547],{},[592,2544,689],{},[567,2546,2473],{}," was configured, the event is sent",[763,2549,2552],{"className":765,"code":2550,"filename":2551,"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,2553,2554,2578,2596,2600,2609,2632,2645,2670,2676,2680,2710,2747],{"__ignoreMap":769},[773,2555,2556,2558,2560,2563,2565,2568,2570,2572,2574,2576],{"class":775,"line":776},[773,2557,977],{"class":779},[773,2559,980],{"class":794},[773,2561,2562],{"class":790}," initLogger",[773,2564,1077],{"class":794},[773,2566,2567],{"class":790}," createLogger",[773,2569,986],{"class":794},[773,2571,989],{"class":779},[773,2573,992],{"class":794},[773,2575,995],{"class":814},[773,2577,998],{"class":794},[773,2579,2580,2582,2584,2586,2588,2590,2592,2594],{"class":775,"line":798},[773,2581,977],{"class":779},[773,2583,980],{"class":794},[773,2585,2169],{"class":790},[773,2587,986],{"class":794},[773,2589,989],{"class":779},[773,2591,992],{"class":794},[773,2593,2178],{"class":814},[773,2595,998],{"class":794},[773,2597,2598],{"class":775,"line":826},[773,2599,1004],{"emptyLinePlaceholder":1003},[773,2601,2602,2605,2607],{"class":775,"line":837},[773,2603,2604],{"class":786},"initLogger",[773,2606,791],{"class":790},[773,2608,795],{"class":794},[773,2610,2611,2614,2616,2618,2621,2623,2625,2628,2630],{"class":775,"line":858},[773,2612,2613],{"class":801},"  env",[773,2615,805],{"class":794},[773,2617,980],{"class":794},[773,2619,2620],{"class":801}," service",[773,2622,805],{"class":794},[773,2624,992],{"class":794},[773,2626,2627],{"class":814},"worker",[773,2629,811],{"class":794},[773,2631,1586],{"class":794},[773,2633,2634,2637,2639,2641,2643],{"class":775,"line":864},[773,2635,2636],{"class":801},"  drain",[773,2638,805],{"class":794},[773,2640,2169],{"class":786},[773,2642,2047],{"class":790},[773,2644,823],{"class":794},[773,2646,2647,2649,2651,2653,2656,2658,2660,2662,2664,2666,2668],{"class":775,"line":1098},[773,2648,1274],{"class":801},[773,2650,805],{"class":794},[773,2652,980],{"class":794},[773,2654,2655],{"class":801}," rates",[773,2657,805],{"class":794},[773,2659,980],{"class":794},[773,2661,1558],{"class":801},[773,2663,805],{"class":794},[773,2665,1563],{"class":1301},[773,2667,986],{"class":794},[773,2669,1586],{"class":794},[773,2671,2672,2674],{"class":775,"line":1103},[773,2673,867],{"class":794},[773,2675,870],{"class":790},[773,2677,2678],{"class":775,"line":1126},[773,2679,1004],{"emptyLinePlaceholder":1003},[773,2681,2682,2684,2686,2688,2690,2692,2694,2697,2699,2701,2704,2706,2708],{"class":775,"line":1793},[773,2683,1010],{"class":1009},[773,2685,1013],{"class":790},[773,2687,1016],{"class":794},[773,2689,2567],{"class":786},[773,2691,791],{"class":790},[773,2693,1055],{"class":794},[773,2695,2696],{"class":801}," task",[773,2698,805],{"class":794},[773,2700,992],{"class":794},[773,2702,2703],{"class":814},"migrate",[773,2705,811],{"class":794},[773,2707,986],{"class":794},[773,2709,870],{"class":790},[773,2711,2712,2714,2716,2718,2720,2722,2725,2727,2730,2732,2734,2736,2738,2741,2743,2745],{"class":775,"line":1837},[773,2713,569],{"class":790},[773,2715,733],{"class":794},[773,2717,711],{"class":786},[773,2719,791],{"class":790},[773,2721,1055],{"class":794},[773,2723,2724],{"class":801}," records",[773,2726,805],{"class":794},[773,2728,2729],{"class":1301}," 500",[773,2731,1077],{"class":794},[773,2733,1316],{"class":801},[773,2735,805],{"class":794},[773,2737,992],{"class":794},[773,2739,2740],{"class":814},"complete",[773,2742,811],{"class":794},[773,2744,986],{"class":794},[773,2746,870],{"class":790},[773,2748,2749,2751,2753,2755],{"class":775,"line":1879},[773,2750,569],{"class":790},[773,2752,733],{"class":794},[773,2754,703],{"class":786},[773,2756,2757],{"class":790},"()\n",[547,2759,2761],{"id":2760},"next-steps","Next Steps",[1195,2763,2764,2769,2774,2779],{},[1198,2765,2766,2768],{},[729,2767,46],{"href":47}," - Design effective wide events",[1198,2770,2771,2773],{},[729,2772,61],{"href":62}," - Configure head and tail sampling",[1198,2775,2776,2778],{},[729,2777,138],{"href":143}," - Send events to external platforms",[1198,2780,2781,2783],{},[729,2782,431],{"href":432}," - Add derived context automatically",[2785,2786,2787],"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":2789},[2790,2791,2805,2806,2807,2808,2809],{"id":549,"depth":798,"text":550},{"id":736,"depth":798,"text":737,"children":2792},[2793,2794,2795,2796,2797,2799,2800,2801,2803],{"id":744,"depth":826,"text":745},{"id":873,"depth":826,"text":874},{"id":959,"depth":826,"text":960},{"id":1189,"depth":826,"text":1190},{"id":1239,"depth":826,"text":2798},"5. Tail Sampling (evlog:emit:keep)",{"id":1514,"depth":826,"text":1515},{"id":1623,"depth":826,"text":1624},{"id":1887,"depth":826,"text":2802},"8. Enrich (evlog:enrich)",{"id":2140,"depth":826,"text":2804},"9. Drain (evlog:drain)",{"id":2247,"depth":798,"text":2248},{"id":2316,"depth":798,"text":2317},{"id":2438,"depth":798,"text":2439},{"id":2491,"depth":798,"text":2492},{"id":2760,"depth":798,"text":2761},"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",[2813,2816],{"label":46,"icon":49,"to":47,"color":2814,"variant":2815},"neutral","subtle",{"label":61,"icon":64,"to":62,"color":2814,"variant":2815},{},{"icon":59},{"title":56,"description":2810},"Yu3uJNclfj3HKmHL5fS-JpUiecOufCrl18HGVzijylE",[2822,2824],{"title":51,"path":52,"stem":53,"description":2823,"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":2825,"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.",1786743658704]