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