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