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