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