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