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