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