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