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