[{"data":1,"prerenderedAt":2420},["ShallowReactive",2],{"navigation_docs":3,"-enrichers-built-in":392,"-enrichers-built-in-surround":2415},[4,35,159,201,289,376],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"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",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Adapters","\u002Fadapters","6.adapters",[294,297,337,352],{"title":41,"path":295,"stem":296,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":298,"path":299,"stem":300,"children":301,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[302,307,312,317,322,327,332],{"title":303,"path":304,"stem":305,"icon":306},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":308,"path":309,"stem":310,"icon":311},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":313,"path":314,"stem":315,"icon":316},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":318,"path":319,"stem":320,"icon":321},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":323,"path":324,"stem":325,"icon":326},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":328,"path":329,"stem":330,"icon":331},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":333,"path":334,"stem":335,"icon":336},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":338,"path":339,"stem":340,"children":341,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[342,347],{"title":343,"path":344,"stem":345,"icon":346},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":348,"path":349,"stem":350,"icon":351},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":353,"path":354,"stem":355,"children":356,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[357,362,367,371],{"title":358,"path":359,"stem":360,"icon":361},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":363,"path":364,"stem":365,"icon":366},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":368,"path":369,"stem":370,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":372,"path":373,"stem":374,"icon":375},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":377,"path":378,"stem":379,"children":380,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[381,384,388],{"title":41,"path":382,"stem":383,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":385,"path":386,"stem":387,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":389,"path":390,"stem":391,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":393,"title":394,"body":395,"description":2403,"extension":2404,"links":2405,"meta":2411,"navigation":2412,"path":386,"seo":2413,"stem":387,"__hash__":2414},"docs\u002F7.enrichers\u002F2.built-in.md","Built-in Enrichers",{"type":396,"value":397,"toc":2395},"minimark",[398,411,452,527,532,539,549,574,579,741,746,936,942,948,952,955,962,981,985,1077,1082,1144,1180,1184,1191,1198,1217,1221,1264,1268,1329,1339,1343,1353,1366,1385,1389,1456,1460,1585,1592,1604,1608,1611,2373,2377,2391],[399,400,401,402,406,407,410],"p",{},"All built-in enrichers are exported from ",[403,404,405],"code",{},"evlog\u002Fenrichers",". Each enricher is a factory function that returns an ",[403,408,409],{},"(ctx: EnrichContext) => void"," callback.",[412,413,416,419,438],"prompt",{":actions":414,"description":415,"icon":288},"[\"copy\",\"cursor\",\"windsurf\"]","Add all built-in evlog enrichers",[399,417,418],{},"Add all built-in enrichers to my evlog setup.",[420,421,422,426,429,432,435],"ol",{},[423,424,425],"li",{},"Identify which framework I'm using and follow its evlog integration pattern",[423,427,428],{},"Import createUserAgentEnricher, createGeoEnricher, createRequestSizeEnricher, and createTraceContextEnricher from 'evlog\u002Fenrichers'",[423,430,431],{},"Wire the enrichers into my framework's enrich configuration",[423,433,434],{},"Enrichers add userAgent, geo, requestSize, and traceContext fields to wide events",[423,436,437],{},"All enrichers accept { overwrite?: boolean } - defaults to false to preserve user-set data",[399,439,440,441,447,448],{},"Enricher docs: ",[442,443,444],"a",{"href":444,"rel":445},"https:\u002F\u002Fwww.evlog.dev\u002Fenrichers\u002Fbuilt-in",[446],"nofollow","\nFramework setup: ",[442,449,450],{"href":450,"rel":451},"https:\u002F\u002Fwww.evlog.dev\u002Fframeworks",[446],[453,454,460],"pre",{"className":455,"code":456,"filename":457,"language":458,"meta":459,"style":459},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {\n  createUserAgentEnricher,\n  createGeoEnricher,\n  createRequestSizeEnricher,\n  createTraceContextEnricher,\n} from 'evlog\u002Fenrichers'\n","server\u002Fplugins\u002Fevlog-enrich.ts","typescript","",[403,461,462,475,485,493,501,509],{"__ignoreMap":459},[463,464,467,471],"span",{"class":465,"line":466},"line",1,[463,468,470],{"class":469},"s7zQu","import",[463,472,474],{"class":473},"sMK4o"," {\n",[463,476,478,482],{"class":465,"line":477},2,[463,479,481],{"class":480},"sTEyZ","  createUserAgentEnricher",[463,483,484],{"class":473},",\n",[463,486,488,491],{"class":465,"line":487},3,[463,489,490],{"class":480},"  createGeoEnricher",[463,492,484],{"class":473},[463,494,496,499],{"class":465,"line":495},4,[463,497,498],{"class":480},"  createRequestSizeEnricher",[463,500,484],{"class":473},[463,502,504,507],{"class":465,"line":503},5,[463,505,506],{"class":480},"  createTraceContextEnricher",[463,508,484],{"class":473},[463,510,512,515,518,521,524],{"class":465,"line":511},6,[463,513,514],{"class":473},"}",[463,516,517],{"class":469}," from",[463,519,520],{"class":473}," '",[463,522,405],{"class":523},"sfazB",[463,525,526],{"class":473},"'\n",[528,529,531],"h2",{"id":530},"user-agent","User Agent",[399,533,534,535,538],{},"Parse browser, OS, and device type from the ",[403,536,537],{},"User-Agent"," header.",[399,540,541,545,546],{},[542,543,544],"strong",{},"Sets:"," ",[403,547,548],{},"event.userAgent",[453,550,553],{"className":455,"code":551,"filename":552,"language":458,"meta":459,"style":459},"const enrich = createUserAgentEnricher()\n","user-agent-enricher.ts",[403,554,555],{"__ignoreMap":459},[463,556,557,561,564,567,571],{"class":465,"line":466},[463,558,560],{"class":559},"spNyl","const",[463,562,563],{"class":480}," enrich ",[463,565,566],{"class":473},"=",[463,568,570],{"class":569},"s2Zo4"," createUserAgentEnricher",[463,572,573],{"class":480},"()\n",[399,575,576],{},[542,577,578],{},"Output shape:",[453,580,583],{"className":455,"code":581,"filename":582,"language":458,"meta":459,"style":459},"interface UserAgentInfo {\n  raw: string                                      \u002F\u002F Original User-Agent string\n  browser?: { name: string; version?: string }     \u002F\u002F Chrome, Firefox, Safari, Edge\n  os?: { name: string; version?: string }          \u002F\u002F Windows, macOS, iOS, Android, Linux\n  device?: { type: 'mobile' | 'tablet' | 'desktop' | 'bot' | 'unknown' }\n}\n","user-agent-types.ts",[403,584,585,596,612,646,674,736],{"__ignoreMap":459},[463,586,587,590,594],{"class":465,"line":466},[463,588,589],{"class":559},"interface",[463,591,593],{"class":592},"sBMFI"," UserAgentInfo",[463,595,474],{"class":473},[463,597,598,602,605,608],{"class":465,"line":477},[463,599,601],{"class":600},"swJcz","  raw",[463,603,604],{"class":473},":",[463,606,607],{"class":592}," string",[463,609,611],{"class":610},"sHwdD","                                      \u002F\u002F Original User-Agent string\n",[463,613,614,617,620,623,626,628,630,633,636,638,640,643],{"class":465,"line":487},[463,615,616],{"class":600},"  browser",[463,618,619],{"class":473},"?:",[463,621,622],{"class":473}," {",[463,624,625],{"class":600}," name",[463,627,604],{"class":473},[463,629,607],{"class":592},[463,631,632],{"class":473},";",[463,634,635],{"class":600}," version",[463,637,619],{"class":473},[463,639,607],{"class":592},[463,641,642],{"class":473}," }",[463,644,645],{"class":610},"     \u002F\u002F Chrome, Firefox, Safari, Edge\n",[463,647,648,651,653,655,657,659,661,663,665,667,669,671],{"class":465,"line":495},[463,649,650],{"class":600},"  os",[463,652,619],{"class":473},[463,654,622],{"class":473},[463,656,625],{"class":600},[463,658,604],{"class":473},[463,660,607],{"class":592},[463,662,632],{"class":473},[463,664,635],{"class":600},[463,666,619],{"class":473},[463,668,607],{"class":592},[463,670,642],{"class":473},[463,672,673],{"class":610},"          \u002F\u002F Windows, macOS, iOS, Android, Linux\n",[463,675,676,679,681,683,686,688,690,693,696,699,701,704,706,708,710,713,715,717,719,722,724,726,728,731,733],{"class":465,"line":503},[463,677,678],{"class":600},"  device",[463,680,619],{"class":473},[463,682,622],{"class":473},[463,684,685],{"class":600}," type",[463,687,604],{"class":473},[463,689,520],{"class":473},[463,691,692],{"class":523},"mobile",[463,694,695],{"class":473},"'",[463,697,698],{"class":473}," |",[463,700,520],{"class":473},[463,702,703],{"class":523},"tablet",[463,705,695],{"class":473},[463,707,698],{"class":473},[463,709,520],{"class":473},[463,711,712],{"class":523},"desktop",[463,714,695],{"class":473},[463,716,698],{"class":473},[463,718,520],{"class":473},[463,720,721],{"class":523},"bot",[463,723,695],{"class":473},[463,725,698],{"class":473},[463,727,520],{"class":473},[463,729,730],{"class":523},"unknown",[463,732,695],{"class":473},[463,734,735],{"class":473}," }\n",[463,737,738],{"class":465,"line":511},[463,739,740],{"class":473},"}\n",[399,742,743],{},[542,744,745],{},"Example output:",[453,747,752],{"className":748,"code":749,"filename":750,"language":751,"meta":459,"style":459},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"userAgent\": {\n    \"raw\": \"Mozilla\u002F5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\u002F537.36 Chrome\u002F120.0.0.0\",\n    \"browser\": { \"name\": \"Chrome\", \"version\": \"120.0.0.0\" },\n    \"os\": { \"name\": \"macOS\", \"version\": \"10.15.7\" },\n    \"device\": { \"type\": \"desktop\" }\n  }\n}\n","Example wide event: userAgent","json",[403,753,754,759,774,796,848,895,925,931],{"__ignoreMap":459},[463,755,756],{"class":465,"line":466},[463,757,758],{"class":473},"{\n",[463,760,761,764,767,770,772],{"class":465,"line":477},[463,762,763],{"class":473},"  \"",[463,765,766],{"class":559},"userAgent",[463,768,769],{"class":473},"\"",[463,771,604],{"class":473},[463,773,474],{"class":473},[463,775,776,779,782,784,786,789,792,794],{"class":465,"line":487},[463,777,778],{"class":473},"    \"",[463,780,781],{"class":592},"raw",[463,783,769],{"class":473},[463,785,604],{"class":473},[463,787,788],{"class":473}," \"",[463,790,791],{"class":523},"Mozilla\u002F5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\u002F537.36 Chrome\u002F120.0.0.0",[463,793,769],{"class":473},[463,795,484],{"class":473},[463,797,798,800,803,805,807,809,811,815,817,819,821,824,826,829,831,834,836,838,840,843,845],{"class":465,"line":495},[463,799,778],{"class":473},[463,801,802],{"class":592},"browser",[463,804,769],{"class":473},[463,806,604],{"class":473},[463,808,622],{"class":473},[463,810,788],{"class":473},[463,812,814],{"class":813},"sbssI","name",[463,816,769],{"class":473},[463,818,604],{"class":473},[463,820,788],{"class":473},[463,822,823],{"class":523},"Chrome",[463,825,769],{"class":473},[463,827,828],{"class":473},",",[463,830,788],{"class":473},[463,832,833],{"class":813},"version",[463,835,769],{"class":473},[463,837,604],{"class":473},[463,839,788],{"class":473},[463,841,842],{"class":523},"120.0.0.0",[463,844,769],{"class":473},[463,846,847],{"class":473}," },\n",[463,849,850,852,855,857,859,861,863,865,867,869,871,874,876,878,880,882,884,886,888,891,893],{"class":465,"line":503},[463,851,778],{"class":473},[463,853,854],{"class":592},"os",[463,856,769],{"class":473},[463,858,604],{"class":473},[463,860,622],{"class":473},[463,862,788],{"class":473},[463,864,814],{"class":813},[463,866,769],{"class":473},[463,868,604],{"class":473},[463,870,788],{"class":473},[463,872,873],{"class":523},"macOS",[463,875,769],{"class":473},[463,877,828],{"class":473},[463,879,788],{"class":473},[463,881,833],{"class":813},[463,883,769],{"class":473},[463,885,604],{"class":473},[463,887,788],{"class":473},[463,889,890],{"class":523},"10.15.7",[463,892,769],{"class":473},[463,894,847],{"class":473},[463,896,897,899,902,904,906,908,910,913,915,917,919,921,923],{"class":465,"line":511},[463,898,778],{"class":473},[463,900,901],{"class":592},"device",[463,903,769],{"class":473},[463,905,604],{"class":473},[463,907,622],{"class":473},[463,909,788],{"class":473},[463,911,912],{"class":813},"type",[463,914,769],{"class":473},[463,916,604],{"class":473},[463,918,788],{"class":473},[463,920,712],{"class":523},[463,922,769],{"class":473},[463,924,735],{"class":473},[463,926,928],{"class":465,"line":927},7,[463,929,930],{"class":473},"  }\n",[463,932,934],{"class":465,"line":933},8,[463,935,740],{"class":473},[399,937,938,941],{},[542,939,940],{},"Detected browsers:"," Edge, Chrome, Firefox, Safari (checked in order, Edge before Chrome to avoid false matches).",[399,943,944,947],{},[542,945,946],{},"Detected devices:"," Bot (crawlers, spiders), Tablet (iPad), Mobile (iPhone, Android phones), Desktop (fallback).",[528,949,951],{"id":950},"geo","Geo",[399,953,954],{},"Extract geographic data from platform-injected headers.",[399,956,957,545,959],{},[542,958,544],{},[403,960,961],{},"event.geo",[453,963,966],{"className":455,"code":964,"filename":965,"language":458,"meta":459,"style":459},"const enrich = createGeoEnricher()\n","geo-enricher.ts",[403,967,968],{"__ignoreMap":459},[463,969,970,972,974,976,979],{"class":465,"line":466},[463,971,560],{"class":559},[463,973,563],{"class":480},[463,975,566],{"class":473},[463,977,978],{"class":569}," createGeoEnricher",[463,980,573],{"class":480},[399,982,983],{},[542,984,578],{},[453,986,989],{"className":455,"code":987,"filename":988,"language":458,"meta":459,"style":459},"interface GeoInfo {\n  country?: string      \u002F\u002F ISO country code (e.g., \"US\", \"FR\")\n  region?: string       \u002F\u002F Region\u002Fstate name\n  regionCode?: string   \u002F\u002F Region code\n  city?: string         \u002F\u002F City name\n  latitude?: number     \u002F\u002F Decimal latitude\n  longitude?: number    \u002F\u002F Decimal longitude\n}\n","geo-types.ts",[403,990,991,1000,1012,1024,1036,1048,1061,1073],{"__ignoreMap":459},[463,992,993,995,998],{"class":465,"line":466},[463,994,589],{"class":559},[463,996,997],{"class":592}," GeoInfo",[463,999,474],{"class":473},[463,1001,1002,1005,1007,1009],{"class":465,"line":477},[463,1003,1004],{"class":600},"  country",[463,1006,619],{"class":473},[463,1008,607],{"class":592},[463,1010,1011],{"class":610},"      \u002F\u002F ISO country code (e.g., \"US\", \"FR\")\n",[463,1013,1014,1017,1019,1021],{"class":465,"line":487},[463,1015,1016],{"class":600},"  region",[463,1018,619],{"class":473},[463,1020,607],{"class":592},[463,1022,1023],{"class":610},"       \u002F\u002F Region\u002Fstate name\n",[463,1025,1026,1029,1031,1033],{"class":465,"line":495},[463,1027,1028],{"class":600},"  regionCode",[463,1030,619],{"class":473},[463,1032,607],{"class":592},[463,1034,1035],{"class":610},"   \u002F\u002F Region code\n",[463,1037,1038,1041,1043,1045],{"class":465,"line":503},[463,1039,1040],{"class":600},"  city",[463,1042,619],{"class":473},[463,1044,607],{"class":592},[463,1046,1047],{"class":610},"         \u002F\u002F City name\n",[463,1049,1050,1053,1055,1058],{"class":465,"line":511},[463,1051,1052],{"class":600},"  latitude",[463,1054,619],{"class":473},[463,1056,1057],{"class":592}," number",[463,1059,1060],{"class":610},"     \u002F\u002F Decimal latitude\n",[463,1062,1063,1066,1068,1070],{"class":465,"line":927},[463,1064,1065],{"class":600},"  longitude",[463,1067,619],{"class":473},[463,1069,1057],{"class":592},[463,1071,1072],{"class":610},"    \u002F\u002F Decimal longitude\n",[463,1074,1075],{"class":465,"line":933},[463,1076,740],{"class":473},[399,1078,1079],{},[542,1080,1081],{},"Supported platforms:",[1083,1084,1085,1101],"table",{},[1086,1087,1088],"thead",{},[1089,1090,1091,1095,1098],"tr",{},[1092,1093,1094],"th",{},"Platform",[1092,1096,1097],{},"Headers",[1092,1099,1100],{},"Coverage",[1102,1103,1104,1131],"tbody",{},[1089,1105,1106,1110,1128],{},[1107,1108,1109],"td",{},"Vercel",[1107,1111,1112,1115,1116,1115,1119,1115,1122,1115,1125],{},[403,1113,1114],{},"x-vercel-ip-country",", ",[403,1117,1118],{},"x-vercel-ip-country-region",[403,1120,1121],{},"x-vercel-ip-city",[403,1123,1124],{},"x-vercel-ip-latitude",[403,1126,1127],{},"x-vercel-ip-longitude",[1107,1129,1130],{},"Full",[1089,1132,1133,1136,1141],{},[1107,1134,1135],{},"Cloudflare",[1107,1137,1138],{},[403,1139,1140],{},"cf-ipcountry",[1107,1142,1143],{},"Country only",[1145,1146,1148,1151,1152,1154,1155,1115,1158,1115,1161,1164,1165,1168,1169,1172,1173,1175,1176,1179],"callout",{"color":1147,"icon":13},"info",[542,1149,1150],{},"Cloudflare note:"," Only ",[403,1153,1140],{}," is a standard Cloudflare HTTP header. Other geo fields (",[403,1156,1157],{},"city",[403,1159,1160],{},"region",[403,1162,1163],{},"latitude",", etc.) are properties of ",[403,1166,1167],{},"request.cf",", which is not exposed as headers. For full Cloudflare geo data, write a ",[442,1170,1171],{"href":390},"custom enricher"," that reads ",[403,1174,1167],{},", or use a Workers middleware to copy ",[403,1177,1178],{},"cf"," properties into custom headers.",[528,1181,1183],{"id":1182},"request-size","Request Size",[399,1185,1186,1187,1190],{},"Capture request and response payload sizes from ",[403,1188,1189],{},"Content-Length"," headers.",[399,1192,1193,545,1195],{},[542,1194,544],{},[403,1196,1197],{},"event.requestSize",[453,1199,1202],{"className":455,"code":1200,"filename":1201,"language":458,"meta":459,"style":459},"const enrich = createRequestSizeEnricher()\n","request-size-enricher.ts",[403,1203,1204],{"__ignoreMap":459},[463,1205,1206,1208,1210,1212,1215],{"class":465,"line":466},[463,1207,560],{"class":559},[463,1209,563],{"class":480},[463,1211,566],{"class":473},[463,1213,1214],{"class":569}," createRequestSizeEnricher",[463,1216,573],{"class":480},[399,1218,1219],{},[542,1220,578],{},[453,1222,1225],{"className":455,"code":1223,"filename":1224,"language":458,"meta":459,"style":459},"interface RequestSizeInfo {\n  requestBytes?: number    \u002F\u002F Request Content-Length\n  responseBytes?: number   \u002F\u002F Response Content-Length\n}\n","request-size-types.ts",[403,1226,1227,1236,1248,1260],{"__ignoreMap":459},[463,1228,1229,1231,1234],{"class":465,"line":466},[463,1230,589],{"class":559},[463,1232,1233],{"class":592}," RequestSizeInfo",[463,1235,474],{"class":473},[463,1237,1238,1241,1243,1245],{"class":465,"line":477},[463,1239,1240],{"class":600},"  requestBytes",[463,1242,619],{"class":473},[463,1244,1057],{"class":592},[463,1246,1247],{"class":610},"    \u002F\u002F Request Content-Length\n",[463,1249,1250,1253,1255,1257],{"class":465,"line":487},[463,1251,1252],{"class":600},"  responseBytes",[463,1254,619],{"class":473},[463,1256,1057],{"class":592},[463,1258,1259],{"class":610},"   \u002F\u002F Response Content-Length\n",[463,1261,1262],{"class":465,"line":495},[463,1263,740],{"class":473},[399,1265,1266],{},[542,1267,745],{},[453,1269,1272],{"className":748,"code":1270,"filename":1271,"language":751,"meta":459,"style":459},"{\n  \"requestSize\": {\n    \"requestBytes\": 1234,\n    \"responseBytes\": 5678\n  }\n}\n","Example wide event: requestSize",[403,1273,1274,1278,1291,1307,1321,1325],{"__ignoreMap":459},[463,1275,1276],{"class":465,"line":466},[463,1277,758],{"class":473},[463,1279,1280,1282,1285,1287,1289],{"class":465,"line":477},[463,1281,763],{"class":473},[463,1283,1284],{"class":559},"requestSize",[463,1286,769],{"class":473},[463,1288,604],{"class":473},[463,1290,474],{"class":473},[463,1292,1293,1295,1298,1300,1302,1305],{"class":465,"line":487},[463,1294,778],{"class":473},[463,1296,1297],{"class":592},"requestBytes",[463,1299,769],{"class":473},[463,1301,604],{"class":473},[463,1303,1304],{"class":813}," 1234",[463,1306,484],{"class":473},[463,1308,1309,1311,1314,1316,1318],{"class":465,"line":495},[463,1310,778],{"class":473},[463,1312,1313],{"class":592},"responseBytes",[463,1315,769],{"class":473},[463,1317,604],{"class":473},[463,1319,1320],{"class":813}," 5678\n",[463,1322,1323],{"class":465,"line":503},[463,1324,930],{"class":473},[463,1326,1327],{"class":465,"line":511},[463,1328,740],{"class":473},[1145,1330,1331,1332,1334,1335,1338],{"color":1147,"icon":13},"This enricher reads the ",[403,1333,1189],{}," header from both the request and response. If the header is missing (e.g., for chunked transfer encoding), the corresponding field will be ",[403,1336,1337],{},"undefined",".",[528,1340,1342],{"id":1341},"trace-context","Trace Context",[399,1344,1345,1346,1349,1350,1190],{},"Extract W3C trace context from the ",[403,1347,1348],{},"traceparent"," and ",[403,1351,1352],{},"tracestate",[399,1354,1355,545,1357,1115,1360,1115,1363],{},[542,1356,544],{},[403,1358,1359],{},"event.traceContext",[403,1361,1362],{},"event.traceId",[403,1364,1365],{},"event.spanId",[453,1367,1370],{"className":455,"code":1368,"filename":1369,"language":458,"meta":459,"style":459},"const enrich = createTraceContextEnricher()\n","trace-context-enricher.ts",[403,1371,1372],{"__ignoreMap":459},[463,1373,1374,1376,1378,1380,1383],{"class":465,"line":466},[463,1375,560],{"class":559},[463,1377,563],{"class":480},[463,1379,566],{"class":473},[463,1381,1382],{"class":569}," createTraceContextEnricher",[463,1384,573],{"class":480},[399,1386,1387],{},[542,1388,578],{},[453,1390,1393],{"className":455,"code":1391,"filename":1392,"language":458,"meta":459,"style":459},"interface TraceContextInfo {\n  traceparent?: string   \u002F\u002F Full traceparent header value\n  tracestate?: string    \u002F\u002F Full tracestate header value\n  traceId?: string       \u002F\u002F 32-char hex trace ID (parsed from traceparent)\n  spanId?: string        \u002F\u002F 16-char hex span ID (parsed from traceparent)\n}\n","trace-context-types.ts",[403,1394,1395,1404,1416,1428,1440,1452],{"__ignoreMap":459},[463,1396,1397,1399,1402],{"class":465,"line":466},[463,1398,589],{"class":559},[463,1400,1401],{"class":592}," TraceContextInfo",[463,1403,474],{"class":473},[463,1405,1406,1409,1411,1413],{"class":465,"line":477},[463,1407,1408],{"class":600},"  traceparent",[463,1410,619],{"class":473},[463,1412,607],{"class":592},[463,1414,1415],{"class":610},"   \u002F\u002F Full traceparent header value\n",[463,1417,1418,1421,1423,1425],{"class":465,"line":487},[463,1419,1420],{"class":600},"  tracestate",[463,1422,619],{"class":473},[463,1424,607],{"class":592},[463,1426,1427],{"class":610},"    \u002F\u002F Full tracestate header value\n",[463,1429,1430,1433,1435,1437],{"class":465,"line":495},[463,1431,1432],{"class":600},"  traceId",[463,1434,619],{"class":473},[463,1436,607],{"class":592},[463,1438,1439],{"class":610},"       \u002F\u002F 32-char hex trace ID (parsed from traceparent)\n",[463,1441,1442,1445,1447,1449],{"class":465,"line":503},[463,1443,1444],{"class":600},"  spanId",[463,1446,619],{"class":473},[463,1448,607],{"class":592},[463,1450,1451],{"class":610},"        \u002F\u002F 16-char hex span ID (parsed from traceparent)\n",[463,1453,1454],{"class":465,"line":511},[463,1455,740],{"class":473},[399,1457,1458],{},[542,1459,745],{},[453,1461,1464],{"className":748,"code":1462,"filename":1463,"language":751,"meta":459,"style":459},"{\n  \"traceContext\": {\n    \"traceparent\": \"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01\",\n    \"traceId\": \"4bf92f3577b34da6a3ce929d0e0e4736\",\n    \"spanId\": \"00f067aa0ba902b7\"\n  },\n  \"traceId\": \"4bf92f3577b34da6a3ce929d0e0e4736\",\n  \"spanId\": \"00f067aa0ba902b7\"\n}\n","Example wide event: traceContext",[403,1465,1466,1470,1483,1502,1522,1541,1546,1564,1580],{"__ignoreMap":459},[463,1467,1468],{"class":465,"line":466},[463,1469,758],{"class":473},[463,1471,1472,1474,1477,1479,1481],{"class":465,"line":477},[463,1473,763],{"class":473},[463,1475,1476],{"class":559},"traceContext",[463,1478,769],{"class":473},[463,1480,604],{"class":473},[463,1482,474],{"class":473},[463,1484,1485,1487,1489,1491,1493,1495,1498,1500],{"class":465,"line":487},[463,1486,778],{"class":473},[463,1488,1348],{"class":592},[463,1490,769],{"class":473},[463,1492,604],{"class":473},[463,1494,788],{"class":473},[463,1496,1497],{"class":523},"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01",[463,1499,769],{"class":473},[463,1501,484],{"class":473},[463,1503,1504,1506,1509,1511,1513,1515,1518,1520],{"class":465,"line":495},[463,1505,778],{"class":473},[463,1507,1508],{"class":592},"traceId",[463,1510,769],{"class":473},[463,1512,604],{"class":473},[463,1514,788],{"class":473},[463,1516,1517],{"class":523},"4bf92f3577b34da6a3ce929d0e0e4736",[463,1519,769],{"class":473},[463,1521,484],{"class":473},[463,1523,1524,1526,1529,1531,1533,1535,1538],{"class":465,"line":503},[463,1525,778],{"class":473},[463,1527,1528],{"class":592},"spanId",[463,1530,769],{"class":473},[463,1532,604],{"class":473},[463,1534,788],{"class":473},[463,1536,1537],{"class":523},"00f067aa0ba902b7",[463,1539,1540],{"class":473},"\"\n",[463,1542,1543],{"class":465,"line":511},[463,1544,1545],{"class":473},"  },\n",[463,1547,1548,1550,1552,1554,1556,1558,1560,1562],{"class":465,"line":927},[463,1549,763],{"class":473},[463,1551,1508],{"class":559},[463,1553,769],{"class":473},[463,1555,604],{"class":473},[463,1557,788],{"class":473},[463,1559,1517],{"class":523},[463,1561,769],{"class":473},[463,1563,484],{"class":473},[463,1565,1566,1568,1570,1572,1574,1576,1578],{"class":465,"line":933},[463,1567,763],{"class":473},[463,1569,1528],{"class":559},[463,1571,769],{"class":473},[463,1573,604],{"class":473},[463,1575,788],{"class":473},[463,1577,1537],{"class":523},[463,1579,1540],{"class":473},[463,1581,1583],{"class":465,"line":1582},9,[463,1584,740],{"class":473},[399,1586,1587,1349,1589,1591],{},[403,1588,1508],{},[403,1590,1528],{}," are also set at the top level of the event for easy querying and correlation.",[1145,1593,1594,1595,1600,1601,1338],{"color":1147,"icon":13},"The traceparent format follows the ",[442,1596,1599],{"href":1597,"rel":1598},"https:\u002F\u002Fwww.w3.org\u002FTR\u002Ftrace-context\u002F",[446],"W3C Trace Context"," specification: ",[403,1602,1603],{},"{version}-{traceId}-{spanId}-{flags}",[528,1605,1607],{"id":1606},"full-setup-example","Full Setup Example",[399,1609,1610],{},"Use all built-in enrichers together. The list of enrichers is identical across frameworks — only the wiring changes.",[1612,1613,1614,1853,2087,2235],"code-group",{},[453,1615,1618],{"className":455,"code":1616,"filename":1617,"language":458,"meta":459,"style":459},"\u002F\u002F server\u002Fplugins\u002Fevlog-enrich.ts\nimport {\n  createUserAgentEnricher,\n  createGeoEnricher,\n  createRequestSizeEnricher,\n  createTraceContextEnricher,\n} from 'evlog\u002Fenrichers'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const enrichers = [\n    createUserAgentEnricher(),\n    createGeoEnricher(),\n    createRequestSizeEnricher(),\n    createTraceContextEnricher(),\n  ]\n\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n  })\n})\n","Nuxt \u002F Nitro",[403,1619,1620,1625,1631,1637,1643,1649,1655,1667,1673,1701,1716,1727,1737,1747,1757,1763,1768,1807,1838,1846],{"__ignoreMap":459},[463,1621,1622],{"class":465,"line":466},[463,1623,1624],{"class":610},"\u002F\u002F server\u002Fplugins\u002Fevlog-enrich.ts\n",[463,1626,1627,1629],{"class":465,"line":477},[463,1628,470],{"class":469},[463,1630,474],{"class":473},[463,1632,1633,1635],{"class":465,"line":487},[463,1634,481],{"class":480},[463,1636,484],{"class":473},[463,1638,1639,1641],{"class":465,"line":495},[463,1640,490],{"class":480},[463,1642,484],{"class":473},[463,1644,1645,1647],{"class":465,"line":503},[463,1646,498],{"class":480},[463,1648,484],{"class":473},[463,1650,1651,1653],{"class":465,"line":511},[463,1652,506],{"class":480},[463,1654,484],{"class":473},[463,1656,1657,1659,1661,1663,1665],{"class":465,"line":927},[463,1658,514],{"class":473},[463,1660,517],{"class":469},[463,1662,520],{"class":473},[463,1664,405],{"class":523},[463,1666,526],{"class":473},[463,1668,1669],{"class":465,"line":933},[463,1670,1672],{"emptyLinePlaceholder":1671},true,"\n",[463,1674,1675,1678,1681,1684,1687,1689,1693,1696,1699],{"class":465,"line":1582},[463,1676,1677],{"class":469},"export",[463,1679,1680],{"class":469}," default",[463,1682,1683],{"class":569}," defineNitroPlugin",[463,1685,1686],{"class":480},"(",[463,1688,1686],{"class":473},[463,1690,1692],{"class":1691},"sHdIc","nitroApp",[463,1694,1695],{"class":473},")",[463,1697,1698],{"class":559}," =>",[463,1700,474],{"class":473},[463,1702,1704,1707,1710,1713],{"class":465,"line":1703},10,[463,1705,1706],{"class":559},"  const",[463,1708,1709],{"class":480}," enrichers",[463,1711,1712],{"class":473}," =",[463,1714,1715],{"class":600}," [\n",[463,1717,1719,1722,1725],{"class":465,"line":1718},11,[463,1720,1721],{"class":569},"    createUserAgentEnricher",[463,1723,1724],{"class":600},"()",[463,1726,484],{"class":473},[463,1728,1730,1733,1735],{"class":465,"line":1729},12,[463,1731,1732],{"class":569},"    createGeoEnricher",[463,1734,1724],{"class":600},[463,1736,484],{"class":473},[463,1738,1740,1743,1745],{"class":465,"line":1739},13,[463,1741,1742],{"class":569},"    createRequestSizeEnricher",[463,1744,1724],{"class":600},[463,1746,484],{"class":473},[463,1748,1750,1753,1755],{"class":465,"line":1749},14,[463,1751,1752],{"class":569},"    createTraceContextEnricher",[463,1754,1724],{"class":600},[463,1756,484],{"class":473},[463,1758,1760],{"class":465,"line":1759},15,[463,1761,1762],{"class":600},"  ]\n",[463,1764,1766],{"class":465,"line":1765},16,[463,1767,1672],{"emptyLinePlaceholder":1671},[463,1769,1771,1774,1776,1779,1781,1784,1786,1788,1791,1793,1795,1798,1801,1803,1805],{"class":465,"line":1770},17,[463,1772,1773],{"class":480},"  nitroApp",[463,1775,1338],{"class":473},[463,1777,1778],{"class":480},"hooks",[463,1780,1338],{"class":473},[463,1782,1783],{"class":569},"hook",[463,1785,1686],{"class":600},[463,1787,695],{"class":473},[463,1789,1790],{"class":523},"evlog:enrich",[463,1792,695],{"class":473},[463,1794,828],{"class":473},[463,1796,1797],{"class":473}," (",[463,1799,1800],{"class":1691},"ctx",[463,1802,1695],{"class":473},[463,1804,1698],{"class":559},[463,1806,474],{"class":473},[463,1808,1810,1813,1815,1817,1820,1823,1825,1828,1831,1833,1835],{"class":465,"line":1809},18,[463,1811,1812],{"class":469},"    for",[463,1814,1797],{"class":600},[463,1816,560],{"class":559},[463,1818,1819],{"class":480}," enricher",[463,1821,1822],{"class":473}," of",[463,1824,1709],{"class":480},[463,1826,1827],{"class":600},") ",[463,1829,1830],{"class":569},"enricher",[463,1832,1686],{"class":600},[463,1834,1800],{"class":480},[463,1836,1837],{"class":600},")\n",[463,1839,1841,1844],{"class":465,"line":1840},19,[463,1842,1843],{"class":473},"  }",[463,1845,1837],{"class":600},[463,1847,1849,1851],{"class":465,"line":1848},20,[463,1850,514],{"class":473},[463,1852,1837],{"class":480},[453,1854,1856],{"className":455,"code":1855,"filename":216,"language":458,"meta":459,"style":459},"\u002F\u002F lib\u002Fevlog.ts\nimport { createEvlog } from 'evlog\u002Fnext'\nimport {\n  createUserAgentEnricher,\n  createGeoEnricher,\n  createRequestSizeEnricher,\n  createTraceContextEnricher,\n} from 'evlog\u002Fenrichers'\n\nconst enrichers = [\n  createUserAgentEnricher(),\n  createGeoEnricher(),\n  createRequestSizeEnricher(),\n  createTraceContextEnricher(),\n]\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n  enrich: (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n  },\n})\n",[403,1857,1858,1863,1883,1889,1895,1901,1907,1913,1925,1929,1940,1948,1956,1964,1972,1977,1981,2018,2034,2051,2075,2080],{"__ignoreMap":459},[463,1859,1860],{"class":465,"line":466},[463,1861,1862],{"class":610},"\u002F\u002F lib\u002Fevlog.ts\n",[463,1864,1865,1867,1869,1872,1874,1876,1878,1881],{"class":465,"line":477},[463,1866,470],{"class":469},[463,1868,622],{"class":473},[463,1870,1871],{"class":480}," createEvlog",[463,1873,642],{"class":473},[463,1875,517],{"class":469},[463,1877,520],{"class":473},[463,1879,1880],{"class":523},"evlog\u002Fnext",[463,1882,526],{"class":473},[463,1884,1885,1887],{"class":465,"line":487},[463,1886,470],{"class":469},[463,1888,474],{"class":473},[463,1890,1891,1893],{"class":465,"line":495},[463,1892,481],{"class":480},[463,1894,484],{"class":473},[463,1896,1897,1899],{"class":465,"line":503},[463,1898,490],{"class":480},[463,1900,484],{"class":473},[463,1902,1903,1905],{"class":465,"line":511},[463,1904,498],{"class":480},[463,1906,484],{"class":473},[463,1908,1909,1911],{"class":465,"line":927},[463,1910,506],{"class":480},[463,1912,484],{"class":473},[463,1914,1915,1917,1919,1921,1923],{"class":465,"line":933},[463,1916,514],{"class":473},[463,1918,517],{"class":469},[463,1920,520],{"class":473},[463,1922,405],{"class":523},[463,1924,526],{"class":473},[463,1926,1927],{"class":465,"line":1582},[463,1928,1672],{"emptyLinePlaceholder":1671},[463,1930,1931,1933,1936,1938],{"class":465,"line":1703},[463,1932,560],{"class":559},[463,1934,1935],{"class":480}," enrichers ",[463,1937,566],{"class":473},[463,1939,1715],{"class":480},[463,1941,1942,1944,1946],{"class":465,"line":1718},[463,1943,481],{"class":569},[463,1945,1724],{"class":480},[463,1947,484],{"class":473},[463,1949,1950,1952,1954],{"class":465,"line":1729},[463,1951,490],{"class":569},[463,1953,1724],{"class":480},[463,1955,484],{"class":473},[463,1957,1958,1960,1962],{"class":465,"line":1739},[463,1959,498],{"class":569},[463,1961,1724],{"class":480},[463,1963,484],{"class":473},[463,1965,1966,1968,1970],{"class":465,"line":1749},[463,1967,506],{"class":569},[463,1969,1724],{"class":480},[463,1971,484],{"class":473},[463,1973,1974],{"class":465,"line":1759},[463,1975,1976],{"class":480},"]\n",[463,1978,1979],{"class":465,"line":1765},[463,1980,1672],{"emptyLinePlaceholder":1671},[463,1982,1983,1985,1988,1990,1993,1995,1998,2000,2003,2005,2008,2010,2012,2014,2016],{"class":465,"line":1770},[463,1984,1677],{"class":469},[463,1986,1987],{"class":559}," const",[463,1989,622],{"class":473},[463,1991,1992],{"class":480}," withEvlog",[463,1994,828],{"class":473},[463,1996,1997],{"class":480}," useLogger",[463,1999,828],{"class":473},[463,2001,2002],{"class":480}," log",[463,2004,828],{"class":473},[463,2006,2007],{"class":480}," createError ",[463,2009,514],{"class":473},[463,2011,1712],{"class":473},[463,2013,1871],{"class":569},[463,2015,1686],{"class":480},[463,2017,758],{"class":473},[463,2019,2020,2023,2025,2027,2030,2032],{"class":465,"line":1809},[463,2021,2022],{"class":600},"  service",[463,2024,604],{"class":473},[463,2026,520],{"class":473},[463,2028,2029],{"class":523},"my-app",[463,2031,695],{"class":473},[463,2033,484],{"class":473},[463,2035,2036,2039,2041,2043,2045,2047,2049],{"class":465,"line":1840},[463,2037,2038],{"class":569},"  enrich",[463,2040,604],{"class":473},[463,2042,1797],{"class":473},[463,2044,1800],{"class":1691},[463,2046,1695],{"class":473},[463,2048,1698],{"class":559},[463,2050,474],{"class":473},[463,2052,2053,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073],{"class":465,"line":1848},[463,2054,1812],{"class":469},[463,2056,1797],{"class":600},[463,2058,560],{"class":559},[463,2060,1819],{"class":480},[463,2062,1822],{"class":473},[463,2064,1709],{"class":480},[463,2066,1827],{"class":600},[463,2068,1830],{"class":569},[463,2070,1686],{"class":600},[463,2072,1800],{"class":480},[463,2074,1837],{"class":600},[463,2076,2078],{"class":465,"line":2077},21,[463,2079,1545],{"class":473},[463,2081,2083,2085],{"class":465,"line":2082},22,[463,2084,514],{"class":473},[463,2086,1837],{"class":480},[453,2088,2091],{"className":455,"code":2089,"filename":2090,"language":458,"meta":459,"style":459},"import {\n  createUserAgentEnricher,\n  createGeoEnricher,\n  createRequestSizeEnricher,\n  createTraceContextEnricher,\n} from 'evlog\u002Fenrichers'\n\nconst enrichers = [\n  createUserAgentEnricher(),\n  createGeoEnricher(),\n  createRequestSizeEnricher(),\n  createTraceContextEnricher(),\n]\n\napp.use(evlog({ enrichers })) \u002F\u002F Hono \u002F Express \u002F Elysia\n\u002F\u002F await app.register(evlog, { enrichers }) \u002F\u002F Fastify\n\u002F\u002F EvlogModule.forRoot({ enrichers }) \u002F\u002F NestJS\n","Hono \u002F Express \u002F Fastify \u002F Elysia \u002F NestJS",[403,2092,2093,2099,2105,2111,2117,2123,2135,2139,2149,2157,2165,2173,2181,2185,2189,2219,2227],{"__ignoreMap":459},[463,2094,2095,2097],{"class":465,"line":466},[463,2096,470],{"class":469},[463,2098,474],{"class":473},[463,2100,2101,2103],{"class":465,"line":477},[463,2102,481],{"class":480},[463,2104,484],{"class":473},[463,2106,2107,2109],{"class":465,"line":487},[463,2108,490],{"class":480},[463,2110,484],{"class":473},[463,2112,2113,2115],{"class":465,"line":495},[463,2114,498],{"class":480},[463,2116,484],{"class":473},[463,2118,2119,2121],{"class":465,"line":503},[463,2120,506],{"class":480},[463,2122,484],{"class":473},[463,2124,2125,2127,2129,2131,2133],{"class":465,"line":511},[463,2126,514],{"class":473},[463,2128,517],{"class":469},[463,2130,520],{"class":473},[463,2132,405],{"class":523},[463,2134,526],{"class":473},[463,2136,2137],{"class":465,"line":927},[463,2138,1672],{"emptyLinePlaceholder":1671},[463,2140,2141,2143,2145,2147],{"class":465,"line":933},[463,2142,560],{"class":559},[463,2144,1935],{"class":480},[463,2146,566],{"class":473},[463,2148,1715],{"class":480},[463,2150,2151,2153,2155],{"class":465,"line":1582},[463,2152,481],{"class":569},[463,2154,1724],{"class":480},[463,2156,484],{"class":473},[463,2158,2159,2161,2163],{"class":465,"line":1703},[463,2160,490],{"class":569},[463,2162,1724],{"class":480},[463,2164,484],{"class":473},[463,2166,2167,2169,2171],{"class":465,"line":1718},[463,2168,498],{"class":569},[463,2170,1724],{"class":480},[463,2172,484],{"class":473},[463,2174,2175,2177,2179],{"class":465,"line":1729},[463,2176,506],{"class":569},[463,2178,1724],{"class":480},[463,2180,484],{"class":473},[463,2182,2183],{"class":465,"line":1739},[463,2184,1976],{"class":480},[463,2186,2187],{"class":465,"line":1749},[463,2188,1672],{"emptyLinePlaceholder":1671},[463,2190,2191,2194,2196,2199,2201,2204,2206,2209,2211,2213,2216],{"class":465,"line":1759},[463,2192,2193],{"class":480},"app",[463,2195,1338],{"class":473},[463,2197,2198],{"class":569},"use",[463,2200,1686],{"class":480},[463,2202,2203],{"class":569},"evlog",[463,2205,1686],{"class":480},[463,2207,2208],{"class":473},"{",[463,2210,1935],{"class":480},[463,2212,514],{"class":473},[463,2214,2215],{"class":480},")) ",[463,2217,2218],{"class":610},"\u002F\u002F Hono \u002F Express \u002F Elysia\n",[463,2220,2221,2224],{"class":465,"line":1765},[463,2222,2223],{"class":610},"\u002F\u002F await app.register(evlog, { enrichers })",[463,2225,2226],{"class":610}," \u002F\u002F Fastify\n",[463,2228,2229,2232],{"class":465,"line":1770},[463,2230,2231],{"class":610},"\u002F\u002F EvlogModule.forRoot({ enrichers })",[463,2233,2234],{"class":610}," \u002F\u002F NestJS\n",[453,2236,2238],{"className":455,"code":2237,"filename":271,"language":458,"meta":459,"style":459},"\u002F\u002F index.ts\nimport { initLogger } from 'evlog'\nimport {\n  createUserAgentEnricher,\n  createGeoEnricher,\n  createRequestSizeEnricher,\n  createTraceContextEnricher,\n} from 'evlog\u002Fenrichers'\n\ninitLogger({\n  enrichers: [\n    createUserAgentEnricher(),\n    createGeoEnricher(),\n    createRequestSizeEnricher(),\n    createTraceContextEnricher(),\n  ],\n})\n",[403,2239,2240,2245,2264,2270,2276,2282,2288,2294,2306,2310,2319,2328,2336,2344,2352,2360,2367],{"__ignoreMap":459},[463,2241,2242],{"class":465,"line":466},[463,2243,2244],{"class":610},"\u002F\u002F index.ts\n",[463,2246,2247,2249,2251,2254,2256,2258,2260,2262],{"class":465,"line":477},[463,2248,470],{"class":469},[463,2250,622],{"class":473},[463,2252,2253],{"class":480}," initLogger",[463,2255,642],{"class":473},[463,2257,517],{"class":469},[463,2259,520],{"class":473},[463,2261,2203],{"class":523},[463,2263,526],{"class":473},[463,2265,2266,2268],{"class":465,"line":487},[463,2267,470],{"class":469},[463,2269,474],{"class":473},[463,2271,2272,2274],{"class":465,"line":495},[463,2273,481],{"class":480},[463,2275,484],{"class":473},[463,2277,2278,2280],{"class":465,"line":503},[463,2279,490],{"class":480},[463,2281,484],{"class":473},[463,2283,2284,2286],{"class":465,"line":511},[463,2285,498],{"class":480},[463,2287,484],{"class":473},[463,2289,2290,2292],{"class":465,"line":927},[463,2291,506],{"class":480},[463,2293,484],{"class":473},[463,2295,2296,2298,2300,2302,2304],{"class":465,"line":933},[463,2297,514],{"class":473},[463,2299,517],{"class":469},[463,2301,520],{"class":473},[463,2303,405],{"class":523},[463,2305,526],{"class":473},[463,2307,2308],{"class":465,"line":1582},[463,2309,1672],{"emptyLinePlaceholder":1671},[463,2311,2312,2315,2317],{"class":465,"line":1703},[463,2313,2314],{"class":569},"initLogger",[463,2316,1686],{"class":480},[463,2318,758],{"class":473},[463,2320,2321,2324,2326],{"class":465,"line":1718},[463,2322,2323],{"class":600},"  enrichers",[463,2325,604],{"class":473},[463,2327,1715],{"class":480},[463,2329,2330,2332,2334],{"class":465,"line":1729},[463,2331,1721],{"class":569},[463,2333,1724],{"class":480},[463,2335,484],{"class":473},[463,2337,2338,2340,2342],{"class":465,"line":1739},[463,2339,1732],{"class":569},[463,2341,1724],{"class":480},[463,2343,484],{"class":473},[463,2345,2346,2348,2350],{"class":465,"line":1749},[463,2347,1742],{"class":569},[463,2349,1724],{"class":480},[463,2351,484],{"class":473},[463,2353,2354,2356,2358],{"class":465,"line":1759},[463,2355,1752],{"class":569},[463,2357,1724],{"class":480},[463,2359,484],{"class":473},[463,2361,2362,2365],{"class":465,"line":1765},[463,2363,2364],{"class":480},"  ]",[463,2366,484],{"class":473},[463,2368,2369,2371],{"class":465,"line":1770},[463,2370,514],{"class":473},[463,2372,1837],{"class":480},[528,2374,2376],{"id":2375},"next-steps","Next Steps",[2378,2379,2380,2386],"ul",{},[423,2381,2382,2385],{},[442,2383,2384],{"href":390},"Custom Enrichers"," - Write your own enricher",[423,2387,2388,2390],{},[442,2389,290],{"href":295}," - Send enriched events to external services",[2392,2393,2394],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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}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}",{"title":459,"searchDepth":477,"depth":477,"links":2396},[2397,2398,2399,2400,2401,2402],{"id":530,"depth":477,"text":531},{"id":950,"depth":477,"text":951},{"id":1182,"depth":477,"text":1183},{"id":1341,"depth":477,"text":1342},{"id":1606,"depth":477,"text":1607},{"id":2375,"depth":477,"text":2376},"Reference for all built-in evlog enrichers. Parse user agents, extract geo data, measure request sizes, and capture trace context automatically.","md",[2406,2409],{"label":2384,"icon":83,"to":390,"color":2407,"variant":2408},"neutral","subtle",{"label":2410,"icon":28,"to":382,"color":2407,"variant":2408},"Enrichers Overview",{},{"title":385,"icon":288},{"title":394,"description":2403},"oIfcu4acgTrvfEW9kACIk9rtXj3mnjGgufVHWD3rMPA",[2416,2418],{"title":41,"path":382,"stem":383,"description":2417,"icon":28,"children":-1},"Enrich your wide events with derived context like user agent, geo data, request size, and trace context. Built-in enrichers and custom enricher support.",{"title":389,"path":390,"stem":391,"description":2419,"icon":83,"children":-1},"Write custom enrichers to add derived context to your wide events. Add deployment metadata, tenant IDs, feature flags, or any computed data.",1778106404320]