[{"data":1,"prerenderedAt":1760},["ShallowReactive",2],{"navigation_docs":3,"-enrichers-custom":292,"-enrichers-custom-surround":1755},[4,30,65,110,198,262,278],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24],{"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",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Logging","\u002Flogging","2.logging",[35,40,45,50,55,60],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F4.client-logging","i-lucide-monitor",{"title":61,"path":62,"stem":63,"icon":64},"AI SDK Integration","\u002Flogging\u002Fai-sdk","2.logging\u002F5.ai-sdk","i-simple-icons-vercel",{"title":66,"path":67,"stem":68,"children":69,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[70,75,80,85,90,95,100,105],{"title":71,"path":72,"stem":73,"icon":74},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":76,"path":77,"stem":78,"icon":79},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":81,"path":82,"stem":83,"icon":84},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":86,"path":87,"stem":88,"icon":89},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":91,"path":92,"stem":93,"icon":94},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices","i-lucide-shield-check",{"title":96,"path":97,"stem":98,"icon":99},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance","i-lucide-gauge",{"title":101,"path":102,"stem":103,"icon":104},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":106,"path":107,"stem":108,"icon":109},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":111,"path":112,"stem":113,"children":114,"page":29},"Frameworks","\u002Fframeworks","4.frameworks",[115,119,124,129,134,139,144,149,154,159,164,169,174,179,183,188,193],{"title":36,"path":116,"stem":117,"icon":118},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":120,"path":121,"stem":122,"icon":123},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":125,"path":126,"stem":127,"icon":128},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":130,"path":131,"stem":132,"icon":133},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":135,"path":136,"stem":137,"icon":138},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":140,"path":141,"stem":142,"icon":143},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":145,"path":146,"stem":147,"icon":148},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":150,"path":151,"stem":152,"icon":153},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":155,"path":156,"stem":157,"icon":158},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":160,"path":161,"stem":162,"icon":163},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":165,"path":166,"stem":167,"icon":168},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":170,"path":171,"stem":172,"icon":173},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":175,"path":176,"stem":177,"icon":178},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":180,"path":181,"stem":182,"icon":89},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":184,"path":185,"stem":186,"icon":187},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":189,"path":190,"stem":191,"icon":192},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":194,"path":195,"stem":196,"icon":197},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":199,"path":200,"stem":201,"children":202,"page":29},"Adapters","\u002Fadapters","5.adapters",[203,207,212,217,222,227,232,237,242,247,252,257],{"title":36,"path":204,"stem":205,"icon":206},"\u002Fadapters\u002Foverview","5.adapters\u002F1.overview","i-custom-plug",{"title":208,"path":209,"stem":210,"icon":211},"Custom Adapters","\u002Fadapters\u002Fcustom","5.adapters\u002F10.custom","i-lucide-code",{"title":213,"path":214,"stem":215,"icon":216},"Pipeline","\u002Fadapters\u002Fpipeline","5.adapters\u002F11.pipeline","i-lucide-workflow",{"title":218,"path":219,"stem":220,"icon":221},"HTTP","\u002Fadapters\u002Fhttp","5.adapters\u002F12.http","i-lucide-globe",{"title":223,"path":224,"stem":225,"icon":226},"Axiom","\u002Fadapters\u002Faxiom","5.adapters\u002F2.axiom","i-custom-axiom",{"title":228,"path":229,"stem":230,"icon":231},"OTLP","\u002Fadapters\u002Fotlp","5.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":233,"path":234,"stem":235,"icon":236},"PostHog","\u002Fadapters\u002Fposthog","5.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":238,"path":239,"stem":240,"icon":241},"Sentry","\u002Fadapters\u002Fsentry","5.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":243,"path":244,"stem":245,"icon":246},"Better Stack","\u002Fadapters\u002Fbetter-stack","5.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":248,"path":249,"stem":250,"icon":251},"File System","\u002Fadapters\u002Ffs","5.adapters\u002F7.fs","i-lucide-hard-drive",{"title":253,"path":254,"stem":255,"icon":256},"Datadog","\u002Fadapters\u002Fdatadog","5.adapters\u002F8.datadog","i-simple-icons-datadog",{"title":258,"path":259,"stem":260,"icon":261},"HyperDX","\u002Fadapters\u002Fhyperdx","5.adapters\u002F9.hyperdx","i-custom-hyperdx",{"title":263,"path":264,"stem":265,"children":266,"page":29},"Enrichers","\u002Fenrichers","6.enrichers",[267,270,274],{"title":36,"path":268,"stem":269,"icon":28},"\u002Fenrichers\u002Foverview","6.enrichers\u002F1.overview",{"title":271,"path":272,"stem":273,"icon":192},"Built-in","\u002Fenrichers\u002Fbuilt-in","6.enrichers\u002F2.built-in",{"title":275,"path":276,"stem":277,"icon":211},"Custom","\u002Fenrichers\u002Fcustom","6.enrichers\u002F3.custom",{"title":279,"path":280,"stem":281,"children":282,"page":29},"NuxtHub","\u002Fnuxthub","7.nuxthub",[283,287],{"title":36,"path":284,"stem":285,"icon":286},"\u002Fnuxthub\u002Foverview","7.nuxthub\u002F1.overview","i-lucide-database",{"title":288,"path":289,"stem":290,"icon":291},"Retention","\u002Fnuxthub\u002Fretention","7.nuxthub\u002F2.retention","i-lucide-clock",{"id":293,"title":294,"body":295,"description":1743,"extension":1744,"links":1745,"meta":1751,"navigation":1752,"path":276,"seo":1753,"stem":277,"__hash__":1754},"docs\u002F6.enrichers\u002F3.custom.md","Custom Enrichers",{"type":296,"value":297,"toc":1732},"minimark",[298,307,312,315,482,485,494,667,671,674,949,1087,1091,1094,1354,1358,1363,1473,1477,1708,1712,1728],[299,300,301,302,306],"p",{},"Write custom enrichers to add any derived context to your wide events. An enricher is a function that receives an ",[303,304,305],"code",{},"EnrichContext"," and mutates the event.",[308,309,311],"h2",{"id":310},"basic-example","Basic Example",[299,313,314],{},"Add deployment metadata to every event:",[316,317,323],"pre",{"className":318,"code":319,"filename":320,"language":321,"meta":322,"style":322},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export 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","server\u002Fplugins\u002Fevlog-enrich.ts","typescript","",[303,324,325,362,406,438,465,474],{"__ignoreMap":322},[326,327,330,334,337,341,345,348,352,355,359],"span",{"class":328,"line":329},"line",1,[326,331,333],{"class":332},"s7zQu","export",[326,335,336],{"class":332}," default",[326,338,340],{"class":339},"s2Zo4"," defineNitroPlugin",[326,342,344],{"class":343},"sTEyZ","(",[326,346,344],{"class":347},"sMK4o",[326,349,351],{"class":350},"sHdIc","nitroApp",[326,353,354],{"class":347},")",[326,356,358],{"class":357},"spNyl"," =>",[326,360,361],{"class":347}," {\n",[326,363,365,368,371,374,376,379,382,385,389,391,394,397,400,402,404],{"class":328,"line":364},2,[326,366,367],{"class":343},"  nitroApp",[326,369,370],{"class":347},".",[326,372,373],{"class":343},"hooks",[326,375,370],{"class":347},[326,377,378],{"class":339},"hook",[326,380,344],{"class":381},"swJcz",[326,383,384],{"class":347},"'",[326,386,388],{"class":387},"sfazB","evlog:enrich",[326,390,384],{"class":347},[326,392,393],{"class":347},",",[326,395,396],{"class":347}," (",[326,398,399],{"class":350},"ctx",[326,401,354],{"class":347},[326,403,358],{"class":357},[326,405,361],{"class":347},[326,407,409,412,414,417,419,422,425,428,430,433,435],{"class":328,"line":408},3,[326,410,411],{"class":343},"    ctx",[326,413,370],{"class":347},[326,415,416],{"class":343},"event",[326,418,370],{"class":347},[326,420,421],{"class":343},"deploymentId",[326,423,424],{"class":347}," =",[326,426,427],{"class":343}," process",[326,429,370],{"class":347},[326,431,432],{"class":343},"env",[326,434,370],{"class":347},[326,436,437],{"class":343},"DEPLOYMENT_ID\n",[326,439,441,443,445,447,449,452,454,456,458,460,462],{"class":328,"line":440},4,[326,442,411],{"class":343},[326,444,370],{"class":347},[326,446,416],{"class":343},[326,448,370],{"class":347},[326,450,451],{"class":343},"deployedBy",[326,453,424],{"class":347},[326,455,427],{"class":343},[326,457,370],{"class":347},[326,459,432],{"class":343},[326,461,370],{"class":347},[326,463,464],{"class":343},"DEPLOYED_BY\n",[326,466,468,471],{"class":328,"line":467},5,[326,469,470],{"class":347},"  }",[326,472,473],{"class":381},")\n",[326,475,477,480],{"class":328,"line":476},6,[326,478,479],{"class":347},"}",[326,481,473],{"class":343},[308,483,305],{"id":484},"enrichcontext",[299,486,487,488,490,491,493],{},"The ",[303,489,388],{}," hook receives an ",[303,492,305],{},":",[316,495,498],{"className":318,"code":496,"filename":497,"language":321,"meta":322,"style":322},"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",[303,499,500,511,517,527,532,542,552,562,572,578,584,609,615,625,636,656,661],{"__ignoreMap":322},[326,501,502,505,509],{"class":328,"line":329},[326,503,504],{"class":357},"interface",[326,506,508],{"class":507},"sBMFI"," EnrichContext",[326,510,361],{"class":347},[326,512,513],{"class":328,"line":364},[326,514,516],{"class":515},"sHwdD","  \u002F** The emitted wide event (mutable) *\u002F\n",[326,518,519,522,524],{"class":328,"line":408},[326,520,521],{"class":381},"  event",[326,523,493],{"class":347},[326,525,526],{"class":507}," WideEvent\n",[326,528,529],{"class":328,"line":440},[326,530,531],{"class":515},"  \u002F** Request metadata *\u002F\n",[326,533,534,537,540],{"class":328,"line":467},[326,535,536],{"class":381},"  request",[326,538,539],{"class":347},"?:",[326,541,361],{"class":347},[326,543,544,547,549],{"class":328,"line":476},[326,545,546],{"class":381},"    method",[326,548,539],{"class":347},[326,550,551],{"class":507}," string\n",[326,553,555,558,560],{"class":328,"line":554},7,[326,556,557],{"class":381},"    path",[326,559,539],{"class":347},[326,561,551],{"class":507},[326,563,565,568,570],{"class":328,"line":564},8,[326,566,567],{"class":381},"    requestId",[326,569,539],{"class":347},[326,571,551],{"class":507},[326,573,575],{"class":328,"line":574},9,[326,576,577],{"class":347},"  }\n",[326,579,581],{"class":328,"line":580},10,[326,582,583],{"class":515},"  \u002F** Safe HTTP request headers (sensitive headers filtered out) *\u002F\n",[326,585,587,590,592,595,598,601,603,606],{"class":328,"line":586},11,[326,588,589],{"class":381},"  headers",[326,591,539],{"class":347},[326,593,594],{"class":507}," Record",[326,596,597],{"class":347},"\u003C",[326,599,600],{"class":507},"string",[326,602,393],{"class":347},[326,604,605],{"class":507}," string",[326,607,608],{"class":347},">\n",[326,610,612],{"class":328,"line":611},12,[326,613,614],{"class":515},"  \u002F** Response metadata *\u002F\n",[326,616,618,621,623],{"class":328,"line":617},13,[326,619,620],{"class":381},"  response",[326,622,539],{"class":347},[326,624,361],{"class":347},[326,626,628,631,633],{"class":328,"line":627},14,[326,629,630],{"class":381},"    status",[326,632,539],{"class":347},[326,634,635],{"class":507}," number\n",[326,637,639,642,644,646,648,650,652,654],{"class":328,"line":638},15,[326,640,641],{"class":381},"    headers",[326,643,539],{"class":347},[326,645,594],{"class":507},[326,647,597],{"class":347},[326,649,600],{"class":507},[326,651,393],{"class":347},[326,653,605],{"class":507},[326,655,608],{"class":347},[326,657,659],{"class":328,"line":658},16,[326,660,577],{"class":347},[326,662,664],{"class":328,"line":663},17,[326,665,666],{"class":347},"}\n",[308,668,670],{"id":669},"factory-pattern","Factory Pattern",[299,672,673],{},"For reusable enrichers with options, use the factory pattern (same as built-in enrichers):",[316,675,678],{"className":318,"code":676,"filename":677,"language":321,"meta":322,"style":322},"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",[303,679,680,708,714,723,732,742,746,750,776,804,808,827,871,875,903,916,934,939,944],{"__ignoreMap":322},[326,681,682,685,688,691,693,696,699,702,705],{"class":328,"line":329},[326,683,684],{"class":332},"import",[326,686,687],{"class":332}," type",[326,689,690],{"class":347}," {",[326,692,508],{"class":343},[326,694,695],{"class":347}," }",[326,697,698],{"class":332}," from",[326,700,701],{"class":347}," '",[326,703,704],{"class":387},"evlog",[326,706,707],{"class":347},"'\n",[326,709,710],{"class":328,"line":364},[326,711,713],{"emptyLinePlaceholder":712},true,"\n",[326,715,716,718,721],{"class":328,"line":408},[326,717,504],{"class":357},[326,719,720],{"class":507}," TenantEnricherOptions",[326,722,361],{"class":347},[326,724,725,728,730],{"class":328,"line":440},[326,726,727],{"class":381},"  headerName",[326,729,539],{"class":347},[326,731,551],{"class":507},[326,733,734,737,739],{"class":328,"line":467},[326,735,736],{"class":381},"  overwrite",[326,738,539],{"class":347},[326,740,741],{"class":507}," boolean\n",[326,743,744],{"class":328,"line":476},[326,745,666],{"class":347},[326,747,748],{"class":328,"line":554},[326,749,713],{"emptyLinePlaceholder":712},[326,751,752,754,757,760,762,765,767,769,771,774],{"class":328,"line":564},[326,753,333],{"class":332},[326,755,756],{"class":357}," function",[326,758,759],{"class":339}," createTenantEnricher",[326,761,344],{"class":347},[326,763,764],{"class":350},"options",[326,766,493],{"class":347},[326,768,720],{"class":507},[326,770,424],{"class":347},[326,772,773],{"class":347}," {})",[326,775,361],{"class":347},[326,777,778,781,784,786,789,791,794,797,799,802],{"class":328,"line":574},[326,779,780],{"class":357},"  const",[326,782,783],{"class":343}," headerName",[326,785,424],{"class":347},[326,787,788],{"class":343}," options",[326,790,370],{"class":347},[326,792,793],{"class":343},"headerName",[326,795,796],{"class":347}," ??",[326,798,701],{"class":347},[326,800,801],{"class":387},"x-tenant-id",[326,803,707],{"class":347},[326,805,806],{"class":328,"line":580},[326,807,713],{"emptyLinePlaceholder":712},[326,809,810,813,815,817,819,821,823,825],{"class":328,"line":586},[326,811,812],{"class":332},"  return",[326,814,396],{"class":347},[326,816,399],{"class":350},[326,818,493],{"class":347},[326,820,508],{"class":507},[326,822,354],{"class":347},[326,824,358],{"class":357},[326,826,361],{"class":347},[326,828,829,832,834,837,839,841,844,847,850,852,854,856,859,862,865,868],{"class":328,"line":611},[326,830,831],{"class":332},"    if",[326,833,396],{"class":381},[326,835,836],{"class":347},"!",[326,838,764],{"class":343},[326,840,370],{"class":347},[326,842,843],{"class":343},"overwrite",[326,845,846],{"class":347}," &&",[326,848,849],{"class":343}," ctx",[326,851,370],{"class":347},[326,853,416],{"class":343},[326,855,370],{"class":347},[326,857,858],{"class":343},"tenantId",[326,860,861],{"class":347}," !==",[326,863,864],{"class":347}," undefined",[326,866,867],{"class":381},") ",[326,869,870],{"class":332},"return\n",[326,872,873],{"class":328,"line":617},[326,874,713],{"emptyLinePlaceholder":712},[326,876,877,880,883,885,887,889,892,895,898,900],{"class":328,"line":627},[326,878,879],{"class":357},"    const",[326,881,882],{"class":343}," tenantId",[326,884,424],{"class":347},[326,886,849],{"class":343},[326,888,370],{"class":347},[326,890,891],{"class":343},"headers",[326,893,894],{"class":347},"?.",[326,896,897],{"class":381},"[",[326,899,793],{"class":343},[326,901,902],{"class":381},"]\n",[326,904,905,907,909,911,913],{"class":328,"line":638},[326,906,831],{"class":332},[326,908,396],{"class":381},[326,910,858],{"class":343},[326,912,867],{"class":381},[326,914,915],{"class":347},"{\n",[326,917,918,921,923,925,927,929,931],{"class":328,"line":658},[326,919,920],{"class":343},"      ctx",[326,922,370],{"class":347},[326,924,416],{"class":343},[326,926,370],{"class":347},[326,928,858],{"class":343},[326,930,424],{"class":347},[326,932,933],{"class":343}," tenantId\n",[326,935,936],{"class":328,"line":663},[326,937,938],{"class":347},"    }\n",[326,940,942],{"class":328,"line":941},18,[326,943,577],{"class":347},[326,945,947],{"class":328,"line":946},19,[326,948,666],{"class":347},[316,950,952],{"className":318,"code":951,"filename":320,"language":321,"meta":322,"style":322},"import { 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', (ctx) => {\n    enrichTenant(ctx)\n  })\n})\n",[303,953,954,973,977,997,1028,1032,1064,1075,1081],{"__ignoreMap":322},[326,955,956,958,960,962,964,966,968,971],{"class":328,"line":329},[326,957,684],{"class":332},[326,959,690],{"class":347},[326,961,759],{"class":343},[326,963,695],{"class":347},[326,965,698],{"class":332},[326,967,701],{"class":347},[326,969,970],{"class":387},"~\u002Fserver\u002Futils\u002Fenrichers",[326,972,707],{"class":347},[326,974,975],{"class":328,"line":364},[326,976,713],{"emptyLinePlaceholder":712},[326,978,979,981,983,985,987,989,991,993,995],{"class":328,"line":408},[326,980,333],{"class":332},[326,982,336],{"class":332},[326,984,340],{"class":339},[326,986,344],{"class":343},[326,988,344],{"class":347},[326,990,351],{"class":350},[326,992,354],{"class":347},[326,994,358],{"class":357},[326,996,361],{"class":347},[326,998,999,1001,1004,1006,1008,1010,1013,1015,1017,1019,1022,1024,1026],{"class":328,"line":440},[326,1000,780],{"class":357},[326,1002,1003],{"class":343}," enrichTenant",[326,1005,424],{"class":347},[326,1007,759],{"class":339},[326,1009,344],{"class":381},[326,1011,1012],{"class":347},"{",[326,1014,783],{"class":381},[326,1016,493],{"class":347},[326,1018,701],{"class":347},[326,1020,1021],{"class":387},"x-org-id",[326,1023,384],{"class":347},[326,1025,695],{"class":347},[326,1027,473],{"class":381},[326,1029,1030],{"class":328,"line":467},[326,1031,713],{"emptyLinePlaceholder":712},[326,1033,1034,1036,1038,1040,1042,1044,1046,1048,1050,1052,1054,1056,1058,1060,1062],{"class":328,"line":476},[326,1035,367],{"class":343},[326,1037,370],{"class":347},[326,1039,373],{"class":343},[326,1041,370],{"class":347},[326,1043,378],{"class":339},[326,1045,344],{"class":381},[326,1047,384],{"class":347},[326,1049,388],{"class":387},[326,1051,384],{"class":347},[326,1053,393],{"class":347},[326,1055,396],{"class":347},[326,1057,399],{"class":350},[326,1059,354],{"class":347},[326,1061,358],{"class":357},[326,1063,361],{"class":347},[326,1065,1066,1069,1071,1073],{"class":328,"line":554},[326,1067,1068],{"class":339},"    enrichTenant",[326,1070,344],{"class":381},[326,1072,399],{"class":343},[326,1074,473],{"class":381},[326,1076,1077,1079],{"class":328,"line":564},[326,1078,470],{"class":347},[326,1080,473],{"class":381},[326,1082,1083,1085],{"class":328,"line":574},[326,1084,479],{"class":347},[326,1086,473],{"class":343},[308,1088,1090],{"id":1089},"combining-with-built-in-enrichers","Combining with Built-in Enrichers",[299,1092,1093],{},"Mix custom enrichers with built-in ones:",[316,1095,1097],{"className":318,"code":1096,"filename":320,"language":321,"meta":322,"style":322},"import { createUserAgentEnricher, createGeoEnricher } from 'evlog\u002Fenrichers'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const builtIn = [\n    createUserAgentEnricher(),\n    createGeoEnricher(),\n  ]\n\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    \u002F\u002F Run built-in enrichers\n    for (const enricher of builtIn) enricher(ctx)\n\n    \u002F\u002F Add custom context\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})\n",[303,1098,1099,1124,1128,1148,1160,1171,1180,1185,1189,1221,1226,1255,1259,1264,1303,1342,1348],{"__ignoreMap":322},[326,1100,1101,1103,1105,1108,1110,1113,1115,1117,1119,1122],{"class":328,"line":329},[326,1102,684],{"class":332},[326,1104,690],{"class":347},[326,1106,1107],{"class":343}," createUserAgentEnricher",[326,1109,393],{"class":347},[326,1111,1112],{"class":343}," createGeoEnricher",[326,1114,695],{"class":347},[326,1116,698],{"class":332},[326,1118,701],{"class":347},[326,1120,1121],{"class":387},"evlog\u002Fenrichers",[326,1123,707],{"class":347},[326,1125,1126],{"class":328,"line":364},[326,1127,713],{"emptyLinePlaceholder":712},[326,1129,1130,1132,1134,1136,1138,1140,1142,1144,1146],{"class":328,"line":408},[326,1131,333],{"class":332},[326,1133,336],{"class":332},[326,1135,340],{"class":339},[326,1137,344],{"class":343},[326,1139,344],{"class":347},[326,1141,351],{"class":350},[326,1143,354],{"class":347},[326,1145,358],{"class":357},[326,1147,361],{"class":347},[326,1149,1150,1152,1155,1157],{"class":328,"line":440},[326,1151,780],{"class":357},[326,1153,1154],{"class":343}," builtIn",[326,1156,424],{"class":347},[326,1158,1159],{"class":381}," [\n",[326,1161,1162,1165,1168],{"class":328,"line":467},[326,1163,1164],{"class":339},"    createUserAgentEnricher",[326,1166,1167],{"class":381},"()",[326,1169,1170],{"class":347},",\n",[326,1172,1173,1176,1178],{"class":328,"line":476},[326,1174,1175],{"class":339},"    createGeoEnricher",[326,1177,1167],{"class":381},[326,1179,1170],{"class":347},[326,1181,1182],{"class":328,"line":554},[326,1183,1184],{"class":381},"  ]\n",[326,1186,1187],{"class":328,"line":564},[326,1188,713],{"emptyLinePlaceholder":712},[326,1190,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209,1211,1213,1215,1217,1219],{"class":328,"line":574},[326,1192,367],{"class":343},[326,1194,370],{"class":347},[326,1196,373],{"class":343},[326,1198,370],{"class":347},[326,1200,378],{"class":339},[326,1202,344],{"class":381},[326,1204,384],{"class":347},[326,1206,388],{"class":387},[326,1208,384],{"class":347},[326,1210,393],{"class":347},[326,1212,396],{"class":347},[326,1214,399],{"class":350},[326,1216,354],{"class":347},[326,1218,358],{"class":357},[326,1220,361],{"class":347},[326,1222,1223],{"class":328,"line":580},[326,1224,1225],{"class":515},"    \u002F\u002F Run built-in enrichers\n",[326,1227,1228,1231,1233,1236,1239,1242,1244,1246,1249,1251,1253],{"class":328,"line":586},[326,1229,1230],{"class":332},"    for",[326,1232,396],{"class":381},[326,1234,1235],{"class":357},"const",[326,1237,1238],{"class":343}," enricher",[326,1240,1241],{"class":347}," of",[326,1243,1154],{"class":343},[326,1245,867],{"class":381},[326,1247,1248],{"class":339},"enricher",[326,1250,344],{"class":381},[326,1252,399],{"class":343},[326,1254,473],{"class":381},[326,1256,1257],{"class":328,"line":611},[326,1258,713],{"emptyLinePlaceholder":712},[326,1260,1261],{"class":328,"line":617},[326,1262,1263],{"class":515},"    \u002F\u002F Add custom context\n",[326,1265,1266,1268,1270,1272,1274,1277,1279,1281,1283,1285,1287,1290,1292,1294,1296,1298,1300],{"class":328,"line":627},[326,1267,411],{"class":343},[326,1269,370],{"class":347},[326,1271,416],{"class":343},[326,1273,370],{"class":347},[326,1275,1276],{"class":343},"region",[326,1278,424],{"class":347},[326,1280,427],{"class":343},[326,1282,370],{"class":347},[326,1284,432],{"class":343},[326,1286,370],{"class":347},[326,1288,1289],{"class":343},"FLY_REGION",[326,1291,796],{"class":347},[326,1293,427],{"class":343},[326,1295,370],{"class":347},[326,1297,432],{"class":343},[326,1299,370],{"class":347},[326,1301,1302],{"class":343},"AWS_REGION\n",[326,1304,1305,1307,1309,1311,1313,1316,1318,1320,1322,1324,1326,1329,1331,1333,1335,1337,1339],{"class":328,"line":638},[326,1306,411],{"class":343},[326,1308,370],{"class":347},[326,1310,416],{"class":343},[326,1312,370],{"class":347},[326,1314,1315],{"class":343},"instance",[326,1317,424],{"class":347},[326,1319,427],{"class":343},[326,1321,370],{"class":347},[326,1323,432],{"class":343},[326,1325,370],{"class":347},[326,1327,1328],{"class":343},"FLY_ALLOC_ID",[326,1330,796],{"class":347},[326,1332,427],{"class":343},[326,1334,370],{"class":347},[326,1336,432],{"class":343},[326,1338,370],{"class":347},[326,1340,1341],{"class":343},"HOSTNAME\n",[326,1343,1344,1346],{"class":328,"line":658},[326,1345,470],{"class":347},[326,1347,473],{"class":381},[326,1349,1350,1352],{"class":328,"line":663},[326,1351,479],{"class":347},[326,1353,473],{"class":343},[308,1355,1357],{"id":1356},"more-examples","More Examples",[1359,1360,1362],"h3",{"id":1361},"feature-flags","Feature Flags",[316,1364,1366],{"className":318,"code":1365,"filename":320,"language":321,"meta":322,"style":322},"nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n  ctx.event.featureFlags = {\n    newCheckout: isEnabled('new-checkout'),\n    betaApi: isEnabled('beta-api'),\n  }\n})\n",[303,1367,1368,1400,1418,1441,1463,1467],{"__ignoreMap":322},[326,1369,1370,1372,1374,1376,1378,1380,1382,1384,1386,1388,1390,1392,1394,1396,1398],{"class":328,"line":329},[326,1371,351],{"class":343},[326,1373,370],{"class":347},[326,1375,373],{"class":343},[326,1377,370],{"class":347},[326,1379,378],{"class":339},[326,1381,344],{"class":343},[326,1383,384],{"class":347},[326,1385,388],{"class":387},[326,1387,384],{"class":347},[326,1389,393],{"class":347},[326,1391,396],{"class":347},[326,1393,399],{"class":350},[326,1395,354],{"class":347},[326,1397,358],{"class":357},[326,1399,361],{"class":347},[326,1401,1402,1405,1407,1409,1411,1414,1416],{"class":328,"line":364},[326,1403,1404],{"class":343},"  ctx",[326,1406,370],{"class":347},[326,1408,416],{"class":343},[326,1410,370],{"class":347},[326,1412,1413],{"class":343},"featureFlags",[326,1415,424],{"class":347},[326,1417,361],{"class":347},[326,1419,1420,1423,1425,1428,1430,1432,1435,1437,1439],{"class":328,"line":408},[326,1421,1422],{"class":381},"    newCheckout",[326,1424,493],{"class":347},[326,1426,1427],{"class":339}," isEnabled",[326,1429,344],{"class":381},[326,1431,384],{"class":347},[326,1433,1434],{"class":387},"new-checkout",[326,1436,384],{"class":347},[326,1438,354],{"class":381},[326,1440,1170],{"class":347},[326,1442,1443,1446,1448,1450,1452,1454,1457,1459,1461],{"class":328,"line":440},[326,1444,1445],{"class":381},"    betaApi",[326,1447,493],{"class":347},[326,1449,1427],{"class":339},[326,1451,344],{"class":381},[326,1453,384],{"class":347},[326,1455,1456],{"class":387},"beta-api",[326,1458,384],{"class":347},[326,1460,354],{"class":381},[326,1462,1170],{"class":347},[326,1464,1465],{"class":328,"line":467},[326,1466,577],{"class":347},[326,1468,1469,1471],{"class":328,"line":476},[326,1470,479],{"class":347},[326,1472,473],{"class":343},[1359,1474,1476],{"id":1475},"response-time-classification","Response Time Classification",[316,1478,1480],{"className":318,"code":1479,"filename":320,"language":321,"meta":322,"style":322},"nitroApp.hooks.hook('evlog:enrich', (ctx) => {\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",[303,1481,1482,1514,1546,1564,1568,1605,1643,1679,1702],{"__ignoreMap":322},[326,1483,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512],{"class":328,"line":329},[326,1485,351],{"class":343},[326,1487,370],{"class":347},[326,1489,373],{"class":343},[326,1491,370],{"class":347},[326,1493,378],{"class":339},[326,1495,344],{"class":343},[326,1497,384],{"class":347},[326,1499,388],{"class":387},[326,1501,384],{"class":347},[326,1503,393],{"class":347},[326,1505,396],{"class":347},[326,1507,399],{"class":350},[326,1509,354],{"class":347},[326,1511,358],{"class":357},[326,1513,361],{"class":347},[326,1515,1516,1518,1521,1523,1525,1527,1529,1531,1534,1537,1540,1543],{"class":328,"line":364},[326,1517,780],{"class":357},[326,1519,1520],{"class":343}," duration",[326,1522,424],{"class":347},[326,1524,849],{"class":343},[326,1526,370],{"class":347},[326,1528,416],{"class":343},[326,1530,370],{"class":347},[326,1532,1533],{"class":343},"duration",[326,1535,1536],{"class":332}," as",[326,1538,1539],{"class":507}," number",[326,1541,1542],{"class":347}," |",[326,1544,1545],{"class":507}," undefined\n",[326,1547,1548,1551,1553,1555,1558,1560,1562],{"class":328,"line":408},[326,1549,1550],{"class":332},"  if",[326,1552,396],{"class":381},[326,1554,1533],{"class":343},[326,1556,1557],{"class":347}," ===",[326,1559,864],{"class":347},[326,1561,867],{"class":381},[326,1563,870],{"class":332},[326,1565,1566],{"class":328,"line":440},[326,1567,713],{"emptyLinePlaceholder":712},[326,1569,1570,1572,1574,1576,1579,1583,1585,1587,1589,1591,1593,1596,1598,1600,1603],{"class":328,"line":467},[326,1571,1550],{"class":332},[326,1573,396],{"class":381},[326,1575,1533],{"class":343},[326,1577,1578],{"class":347}," \u003C",[326,1580,1582],{"class":1581},"sbssI"," 100",[326,1584,867],{"class":381},[326,1586,399],{"class":343},[326,1588,370],{"class":347},[326,1590,416],{"class":343},[326,1592,370],{"class":347},[326,1594,1595],{"class":343},"performanceTier",[326,1597,424],{"class":347},[326,1599,701],{"class":347},[326,1601,1602],{"class":387},"fast",[326,1604,707],{"class":347},[326,1606,1607,1610,1613,1615,1617,1619,1622,1624,1626,1628,1630,1632,1634,1636,1638,1641],{"class":328,"line":476},[326,1608,1609],{"class":332},"  else",[326,1611,1612],{"class":332}," if",[326,1614,396],{"class":381},[326,1616,1533],{"class":343},[326,1618,1578],{"class":347},[326,1620,1621],{"class":1581}," 500",[326,1623,867],{"class":381},[326,1625,399],{"class":343},[326,1627,370],{"class":347},[326,1629,416],{"class":343},[326,1631,370],{"class":347},[326,1633,1595],{"class":343},[326,1635,424],{"class":347},[326,1637,701],{"class":347},[326,1639,1640],{"class":387},"normal",[326,1642,707],{"class":347},[326,1644,1645,1647,1649,1651,1653,1655,1658,1660,1662,1664,1666,1668,1670,1672,1674,1677],{"class":328,"line":554},[326,1646,1609],{"class":332},[326,1648,1612],{"class":332},[326,1650,396],{"class":381},[326,1652,1533],{"class":343},[326,1654,1578],{"class":347},[326,1656,1657],{"class":1581}," 2000",[326,1659,867],{"class":381},[326,1661,399],{"class":343},[326,1663,370],{"class":347},[326,1665,416],{"class":343},[326,1667,370],{"class":347},[326,1669,1595],{"class":343},[326,1671,424],{"class":347},[326,1673,701],{"class":347},[326,1675,1676],{"class":387},"slow",[326,1678,707],{"class":347},[326,1680,1681,1683,1685,1687,1689,1691,1693,1695,1697,1700],{"class":328,"line":564},[326,1682,1609],{"class":332},[326,1684,849],{"class":343},[326,1686,370],{"class":347},[326,1688,416],{"class":343},[326,1690,370],{"class":347},[326,1692,1595],{"class":343},[326,1694,424],{"class":347},[326,1696,701],{"class":347},[326,1698,1699],{"class":387},"critical",[326,1701,707],{"class":347},[326,1703,1704,1706],{"class":328,"line":574},[326,1705,479],{"class":347},[326,1707,473],{"class":343},[308,1709,1711],{"id":1710},"next-steps","Next Steps",[1713,1714,1715,1723],"ul",{},[1716,1717,1718,1722],"li",{},[1719,1720,1721],"a",{"href":272},"Built-in Enrichers"," - See all available built-in enrichers",[1716,1724,1725,1727],{},[1719,1726,199],{"href":204}," - Send enriched events to external services",[1729,1730,1731],"style",{},"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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":322,"searchDepth":364,"depth":364,"links":1733},[1734,1735,1736,1737,1738,1742],{"id":310,"depth":364,"text":311},{"id":484,"depth":364,"text":305},{"id":669,"depth":364,"text":670},{"id":1089,"depth":364,"text":1090},{"id":1356,"depth":364,"text":1357,"children":1739},[1740,1741],{"id":1361,"depth":408,"text":1362},{"id":1475,"depth":408,"text":1476},{"id":1710,"depth":364,"text":1711},"Write custom enrichers to add derived context to your wide events. Add deployment metadata, tenant IDs, feature flags, or any computed data.","md",[1746,1749],{"label":1721,"icon":192,"to":272,"color":1747,"variant":1748},"neutral","subtle",{"label":1750,"icon":28,"to":268,"color":1747,"variant":1748},"Enrichers Overview",{},{"title":275,"icon":211},{"title":294,"description":1743},"nToRn37xcPhI6soTJJXKID7tz3A6NrSUEybNeItg8-8",[1756,1758],{"title":271,"path":272,"stem":273,"description":1757,"icon":192,"children":-1},"Reference for all built-in evlog enrichers. Parse user agents, extract geo data, measure request sizes, and capture trace context automatically.",{"title":36,"path":284,"stem":285,"description":1759,"icon":286,"children":-1},"Self-hosted log retention for evlog using NuxtHub database storage. Store, query, and automatically clean up your structured logs with zero external dependencies.",1776073777709]