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