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