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