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