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