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