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