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