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