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