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