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