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