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