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