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