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