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