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