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