[{"data":1,"prerenderedAt":2802},["ShallowReactive",2],{"navigation_docs":3,"-learn-lifecycle":510,"-learn-lifecycle-surround":2797},[4,30,80,123,293,425,480],{"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},"CLI","\u002Fcli","3.cli",[85,88,93,98,103,108,113,118],{"title":36,"path":86,"stem":87,"icon":44},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":89,"path":90,"stem":91,"icon":92},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":94,"path":95,"stem":96,"icon":97},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":99,"path":100,"stem":101,"icon":102},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":104,"path":105,"stem":106,"icon":107},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":109,"path":110,"stem":111,"icon":112},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":114,"path":115,"stem":116,"icon":117},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":119,"path":120,"stem":121,"icon":122},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":124,"path":125,"stem":126,"children":127,"page":29},"Integrate","\u002Fintegrate","4.integrate",[128,132,205],{"title":36,"path":129,"stem":130,"icon":131},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":133,"path":134,"stem":135,"children":136,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[137,140,180],{"title":36,"path":138,"stem":139,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":141,"path":142,"stem":143,"children":144,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[145,150,155,160,165,170,175],{"title":146,"path":147,"stem":148,"icon":149},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":151,"path":152,"stem":153,"icon":154},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","4.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":156,"path":157,"stem":158,"icon":159},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":161,"path":162,"stem":163,"icon":164},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":166,"path":167,"stem":168,"icon":169},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":171,"path":172,"stem":173,"icon":174},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":176,"path":177,"stem":178,"icon":179},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","4.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":181,"path":182,"stem":183,"children":184,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[185,190,195,200],{"title":186,"path":187,"stem":188,"icon":189},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":191,"path":192,"stem":193,"icon":194},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":196,"path":197,"stem":198,"icon":199},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":201,"path":202,"stem":203,"icon":204},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Floki","4.integrate\u002Fadapters\u002Fself-hosted\u002F04.loki","i-simple-icons-grafana",{"title":206,"path":207,"stem":208,"children":209,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[210,214,219,224,229,234,239,244,249,254,259,264,269,274,278,283,288],{"title":36,"path":211,"stem":212,"icon":213},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":215,"path":216,"stem":217,"icon":218},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":220,"path":221,"stem":222,"icon":223},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":225,"path":226,"stem":227,"icon":228},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":230,"path":231,"stem":232,"icon":233},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":235,"path":236,"stem":237,"icon":238},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":240,"path":241,"stem":242,"icon":243},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":245,"path":246,"stem":247,"icon":248},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":250,"path":251,"stem":252,"icon":253},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":255,"path":256,"stem":257,"icon":258},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":260,"path":261,"stem":262,"icon":263},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":265,"path":266,"stem":267,"icon":268},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":270,"path":271,"stem":272,"icon":273},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":275,"path":276,"stem":277,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":279,"path":280,"stem":281,"icon":282},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":284,"path":285,"stem":286,"icon":287},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":289,"path":290,"stem":291,"icon":292},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":294,"path":295,"stem":296,"children":297,"page":29},"Use Cases","\u002Fuse-cases","5.use-cases",[298,301,306,335,362,394,415,420],{"title":36,"path":299,"stem":300,"icon":102},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":302,"path":303,"stem":304,"icon":305},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":307,"icon":308,"path":309,"stem":310,"children":311,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[312,315,320,325,330],{"title":36,"path":313,"stem":314,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":316,"path":317,"stem":318,"icon":319},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":321,"path":322,"stem":323,"icon":324},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":326,"path":327,"stem":328,"icon":329},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":331,"path":332,"stem":333,"icon":334},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":336,"icon":337,"path":338,"stem":339,"children":340,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[341,344,349,354,358],{"title":36,"path":342,"stem":343,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":345,"path":346,"stem":347,"icon":348},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":350,"path":351,"stem":352,"icon":353},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":355,"path":356,"stem":357,"icon":305},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":359,"path":360,"stem":361,"icon":107},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":363,"icon":364,"path":365,"stem":366,"children":367,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[368,371,376,381,386,390],{"title":36,"path":369,"stem":370,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":372,"path":373,"stem":374,"icon":375},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":377,"path":378,"stem":379,"icon":380},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":382,"path":383,"stem":384,"icon":385},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":387,"path":388,"stem":389,"icon":364},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":391,"path":392,"stem":393,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":331,"icon":107,"path":395,"stem":396,"children":397,"page":29},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[398,401,406,411],{"title":36,"path":399,"stem":400,"icon":39},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":402,"path":403,"stem":404,"icon":405},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":407,"path":408,"stem":409,"icon":410},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":412,"path":413,"stem":414,"icon":79},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":416,"path":417,"stem":418,"icon":419},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":421,"path":422,"stem":423,"icon":424},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":426,"path":427,"stem":428,"children":429,"page":29},"Extend","\u002Fextend","6.extend",[430,434,439,444,449,453,457,461,465,470,475],{"title":36,"path":431,"stem":432,"icon":433},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":435,"path":436,"stem":437,"icon":438},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":440,"path":441,"stem":442,"icon":443},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":445,"path":446,"stem":447,"icon":448},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":391,"path":450,"stem":451,"icon":452},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":454,"path":455,"stem":456,"icon":433},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":458,"path":459,"stem":460,"icon":419},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":462,"path":463,"stem":464,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":466,"path":467,"stem":468,"icon":469},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":471,"path":472,"stem":473,"icon":474},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":476,"path":477,"stem":478,"icon":479},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":412,"path":481,"stem":482,"children":483,"page":29},"\u002Freference","7.reference",[484,489,492,497,501,506],{"title":485,"path":486,"stem":487,"icon":488},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":359,"path":490,"stem":491,"icon":107},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":493,"path":494,"stem":495,"icon":496},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":498,"path":499,"stem":500,"icon":364},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":502,"path":503,"stem":504,"icon":505},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":507,"path":508,"stem":509,"icon":419},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"id":511,"title":56,"body":512,"description":2786,"extension":2787,"links":2788,"meta":2793,"navigation":2794,"path":57,"seo":2795,"stem":58,"__hash__":2796},"docs\u002F2.learn\u002F4.lifecycle.md",{"type":513,"value":514,"toc":2764},"minimark",[515,519,522,527,672,710,714,717,722,732,738,847,851,858,927,933,937,943,1157,1163,1167,1170,1210,1213,1220,1232,1340,1346,1478,1488,1492,1495,1502,1571,1594,1597,1601,1607,1858,1861,1868,1871,1951,2107,2114,2121,2131,2214,2221,2225,2290,2294,2301,2412,2416,2422,2455,2465,2469,2476,2524,2734,2738,2760],[516,517,518],"p",{},"evlog events follow a pipeline from creation to delivery. The pipeline differs slightly depending on which logging mode you use, but the core stages (emit, sample, enrich, drain) are shared.",[520,521],"lifecycle-flow",{},[523,524,526],"h2",{"id":525},"overview-by-mode","Overview by Mode",[528,529,530,559],"table",{},[531,532,533],"thead",{},[534,535,536,540,547,556],"tr",{},[537,538,539],"th",{},"Stage",[537,541,542,546],{},[543,544,545],"code",{},"log"," (simple)",[537,548,549,552,553],{},[543,550,551],{},"createLogger"," \u002F ",[543,554,555],{},"createRequestLogger",[537,557,558],{},"Framework middleware",[560,561,562,586,610,629,644,659],"tbody",{},[534,563,564,571,574,583],{},[565,566,567],"td",{},[568,569,570],"strong",{},"Create",[565,572,573],{},"Implicit per call",[565,575,576,579,580],{},[543,577,578],{},"createLogger({...})"," or ",[543,581,582],{},"createRequestLogger({...})",[565,584,585],{},"Auto on request start",[534,587,588,593,596,602],{},[565,589,590],{},[568,591,592],{},"Accumulate",[565,594,595],{},"N\u002FA (single call)",[565,597,598,601],{},[543,599,600],{},"log.set()"," multiple times",[565,603,604,606,607],{},[543,605,600],{}," via ",[543,608,609],{},"useLogger(event)",[534,611,612,617,620,626],{},[565,613,614],{},[568,615,616],{},"Emit",[565,618,619],{},"Immediate",[565,621,622,623],{},"Manual ",[543,624,625],{},"log.emit()",[565,627,628],{},"Auto on response end",[534,630,631,636,639,642],{},[565,632,633],{},[568,634,635],{},"Sample",[565,637,638],{},"Head sampling only",[565,640,641],{},"Head + tail sampling",[565,643,641],{},[534,645,646,651,654,656],{},[565,647,648],{},[568,649,650],{},"Enrich",[565,652,653],{},"Via global drain",[565,655,653],{},[565,657,658],{},"Via hooks or callbacks",[534,660,661,666,668,670],{},[565,662,663],{},[568,664,665],{},"Drain",[565,667,653],{},[565,669,653],{},[565,671,658],{},[516,673,674,675,680,681,684,685,552,688,552,691,552,694,697,698,703,704,709],{},"After ",[568,676,677],{},[543,678,679],{},"emit"," (including when sampling returns no output), the request logger is ",[568,682,683],{},"sealed",": later ",[543,686,687],{},"set",[543,689,690],{},"error",[543,692,693],{},"info",[543,695,696],{},"warn"," calls are ignored with a console warning. For background work that needs its own event, use ",[568,699,700],{},[543,701,702],{},"log.fork()"," where your integration supports it. See ",[705,706,708],"a",{"href":707},"\u002Flearn\u002Fwide-events#after-emit-sealing-and-background-work","Wide events — After emit",".",[523,711,713],{"id":712},"request-logging-step-by-step","Request Logging — Step by Step",[516,715,716],{},"For framework-managed request logging, every request walks the pipeline above. Each stage is detailed below.",[718,719,721],"h3",{"id":720},"_1-route-filtering","1. Route Filtering",[516,723,724,725,552,728,731],{},"When a request arrives, evlog checks whether the path matches the configured ",[543,726,727],{},"include",[543,729,730],{},"exclude"," patterns. If the route is excluded, no logger is created and the request proceeds without any logging overhead.",[516,733,734,735,737],{},"By default, all routes are logged. Use ",[543,736,727],{}," to restrict logging to specific patterns:",[739,740,746],"pre",{"className":741,"code":742,"filename":743,"language":744,"meta":745,"style":745},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    include: ['\u002Fapi\u002F**'],\n  },\n})\n","nuxt.config.ts","typescript","",[543,747,748,772,800,811,832,838],{"__ignoreMap":745},[749,750,753,757,760,764,768],"span",{"class":751,"line":752},"line",1,[749,754,756],{"class":755},"s7zQu","export",[749,758,759],{"class":755}," default",[749,761,763],{"class":762},"s2Zo4"," defineNuxtConfig",[749,765,767],{"class":766},"sTEyZ","(",[749,769,771],{"class":770},"sMK4o","{\n",[749,773,775,779,782,785,788,792,794,797],{"class":751,"line":774},2,[749,776,778],{"class":777},"swJcz","  modules",[749,780,781],{"class":770},":",[749,783,784],{"class":766}," [",[749,786,787],{"class":770},"'",[749,789,791],{"class":790},"sfazB","evlog\u002Fnuxt",[749,793,787],{"class":770},[749,795,796],{"class":766},"]",[749,798,799],{"class":770},",\n",[749,801,803,806,808],{"class":751,"line":802},3,[749,804,805],{"class":777},"  evlog",[749,807,781],{"class":770},[749,809,810],{"class":770}," {\n",[749,812,814,817,819,821,823,826,828,830],{"class":751,"line":813},4,[749,815,816],{"class":777},"    include",[749,818,781],{"class":770},[749,820,784],{"class":766},[749,822,787],{"class":770},[749,824,825],{"class":790},"\u002Fapi\u002F**",[749,827,787],{"class":770},[749,829,796],{"class":766},[749,831,799],{"class":770},[749,833,835],{"class":751,"line":834},5,[749,836,837],{"class":770},"  },\n",[749,839,841,844],{"class":751,"line":840},6,[749,842,843],{"class":770},"}",[749,845,846],{"class":766},")\n",[718,848,850],{"id":849},"_2-logger-creation","2. Logger Creation",[516,852,853,854,857],{},"For matched routes, evlog creates a ",[543,855,856],{},"RequestLogger"," and attaches it to the request context. The logger is pre-populated with:",[528,859,860,870],{},[531,861,862],{},[534,863,864,867],{},[537,865,866],{},"Field",[537,868,869],{},"Source",[560,871,872,890,900,914],{},[534,873,874,879],{},[565,875,876],{},[543,877,878],{},"method",[565,880,881,882,885,886,889],{},"HTTP method (",[543,883,884],{},"GET",", ",[543,887,888],{},"POST",", ...)",[534,891,892,897],{},[565,893,894],{},[543,895,896],{},"path",[565,898,899],{},"Request path",[534,901,902,907],{},[565,903,904],{},[543,905,906],{},"requestId",[565,908,909,910,913],{},"Auto-generated UUID (or ",[543,911,912],{},"cf-ray"," on Cloudflare)",[534,915,916,921],{},[565,917,918],{},[543,919,920],{},"startTime",[565,922,923,926],{},[543,924,925],{},"Date.now()"," for duration calculation",[516,928,929,930,932],{},"The logger is stored on the event context. ",[543,931,609],{}," is a shortcut to retrieve it, it doesn't create a new logger.",[718,934,936],{"id":935},"_3-context-accumulation","3. Context Accumulation",[516,938,939,940,942],{},"During the handler, you call ",[543,941,600],{}," to attach context. Each call deep-merges into the existing context, so you can call it as many times as needed:",[739,944,947],{"className":741,"code":945,"filename":946,"language":744,"meta":745,"style":745},"import { useLogger } from 'evlog'\n\nconst log = useLogger(event)\n\nconst user = await getUser(event)\nlog.set({ user: { id: user.id, plan: user.plan } })\n\nconst cart = await getCart(user.id)\nlog.set({ cart: { items: cart.items.length, total: cart.total } })\n","server\u002Fapi\u002Fcheckout.post.ts",[543,948,949,975,981,998,1002,1019,1072,1077,1100],{"__ignoreMap":745},[749,950,951,954,957,960,963,966,969,972],{"class":751,"line":752},[749,952,953],{"class":755},"import",[749,955,956],{"class":770}," {",[749,958,959],{"class":766}," useLogger",[749,961,962],{"class":770}," }",[749,964,965],{"class":755}," from",[749,967,968],{"class":770}," '",[749,970,971],{"class":790},"evlog",[749,973,974],{"class":770},"'\n",[749,976,977],{"class":751,"line":774},[749,978,980],{"emptyLinePlaceholder":979},true,"\n",[749,982,983,987,990,993,995],{"class":751,"line":802},[749,984,986],{"class":985},"spNyl","const",[749,988,989],{"class":766}," log ",[749,991,992],{"class":770},"=",[749,994,959],{"class":762},[749,996,997],{"class":766},"(event)\n",[749,999,1000],{"class":751,"line":813},[749,1001,980],{"emptyLinePlaceholder":979},[749,1003,1004,1006,1009,1011,1014,1017],{"class":751,"line":834},[749,1005,986],{"class":985},[749,1007,1008],{"class":766}," user ",[749,1010,992],{"class":770},[749,1012,1013],{"class":755}," await",[749,1015,1016],{"class":762}," getUser",[749,1018,997],{"class":766},[749,1020,1021,1023,1025,1027,1029,1032,1035,1037,1039,1042,1044,1046,1048,1051,1054,1057,1059,1061,1063,1066,1068,1070],{"class":751,"line":840},[749,1022,545],{"class":766},[749,1024,709],{"class":770},[749,1026,687],{"class":762},[749,1028,767],{"class":766},[749,1030,1031],{"class":770},"{",[749,1033,1034],{"class":777}," user",[749,1036,781],{"class":770},[749,1038,956],{"class":770},[749,1040,1041],{"class":777}," id",[749,1043,781],{"class":770},[749,1045,1034],{"class":766},[749,1047,709],{"class":770},[749,1049,1050],{"class":766},"id",[749,1052,1053],{"class":770},",",[749,1055,1056],{"class":777}," plan",[749,1058,781],{"class":770},[749,1060,1034],{"class":766},[749,1062,709],{"class":770},[749,1064,1065],{"class":766},"plan ",[749,1067,843],{"class":770},[749,1069,962],{"class":770},[749,1071,846],{"class":766},[749,1073,1075],{"class":751,"line":1074},7,[749,1076,980],{"emptyLinePlaceholder":979},[749,1078,1080,1082,1085,1087,1089,1092,1095,1097],{"class":751,"line":1079},8,[749,1081,986],{"class":985},[749,1083,1084],{"class":766}," cart ",[749,1086,992],{"class":770},[749,1088,1013],{"class":755},[749,1090,1091],{"class":762}," getCart",[749,1093,1094],{"class":766},"(user",[749,1096,709],{"class":770},[749,1098,1099],{"class":766},"id)\n",[749,1101,1103,1105,1107,1109,1111,1113,1116,1118,1120,1123,1125,1127,1129,1132,1134,1137,1139,1142,1144,1146,1148,1151,1153,1155],{"class":751,"line":1102},9,[749,1104,545],{"class":766},[749,1106,709],{"class":770},[749,1108,687],{"class":762},[749,1110,767],{"class":766},[749,1112,1031],{"class":770},[749,1114,1115],{"class":777}," cart",[749,1117,781],{"class":770},[749,1119,956],{"class":770},[749,1121,1122],{"class":777}," items",[749,1124,781],{"class":770},[749,1126,1115],{"class":766},[749,1128,709],{"class":770},[749,1130,1131],{"class":766},"items",[749,1133,709],{"class":770},[749,1135,1136],{"class":766},"length",[749,1138,1053],{"class":770},[749,1140,1141],{"class":777}," total",[749,1143,781],{"class":770},[749,1145,1115],{"class":766},[749,1147,709],{"class":770},[749,1149,1150],{"class":766},"total ",[749,1152,843],{"class":770},[749,1154,962],{"class":770},[749,1156,846],{"class":766},[516,1158,1159,1160,1162],{},"If an error is thrown, evlog's ",[543,1161,690],{}," hook captures it automatically and records it on the logger with the status code.",[718,1164,1166],{"id":1165},"_4-request-end","4. Request End",[516,1168,1169],{},"When the response is sent (or an error is thrown), evlog computes:",[1171,1172,1173,1187,1196],"ul",{},[1174,1175,1176,1179,1180,552,1183,1186],"li",{},[568,1177,1178],{},"Status code"," from the response (or from the error's ",[543,1181,1182],{},"status",[543,1184,1185],{},"statusCode",")",[1174,1188,1189,1192,1193],{},[568,1190,1191],{},"Duration"," from ",[543,1194,1195],{},"Date.now() - startTime",[1174,1197,1198,1201,1202,1204,1205,1207,1208],{},[568,1199,1200],{},"Level"," - ",[543,1203,690],{}," if an error was recorded, ",[543,1206,696],{}," if status >= 400, otherwise ",[543,1209,693],{},[516,1211,1212],{},"If an error triggered the emit, the request is marked as already emitted to prevent double-emission in the response hook.",[718,1214,1216,1217,1186],{"id":1215},"_5-tail-sampling-evlogemitkeep","5. Tail Sampling (",[543,1218,1219],{},"evlog:emit:keep",[516,1221,1222,1223,1226,1227,1231],{},"Before the event is sampled, evlog evaluates ",[568,1224,1225],{},"tail sampling"," rules. These run ",[1228,1229,1230],"em",{},"after"," the request completes, so they can inspect the outcome:",[739,1233,1235],{"className":741,"code":1234,"filename":743,"language":744,"meta":745,"style":745},"evlog: {\n  sampling: {\n    keep: [\n      { duration: 1000 },          \u002F\u002F slow requests\n      { status: 400 },             \u002F\u002F client\u002Fserver errors\n      { path: '\u002Fapi\u002Fcritical\u002F**' }, \u002F\u002F critical paths\n    ],\n  },\n}\n",[543,1236,1237,1246,1255,1265,1286,1303,1324,1331,1335],{"__ignoreMap":745},[749,1238,1239,1242,1244],{"class":751,"line":752},[749,1240,971],{"class":1241},"sBMFI",[749,1243,781],{"class":770},[749,1245,810],{"class":770},[749,1247,1248,1251,1253],{"class":751,"line":774},[749,1249,1250],{"class":1241},"  sampling",[749,1252,781],{"class":770},[749,1254,810],{"class":770},[749,1256,1257,1260,1262],{"class":751,"line":802},[749,1258,1259],{"class":1241},"    keep",[749,1261,781],{"class":770},[749,1263,1264],{"class":777}," [\n",[749,1266,1267,1270,1273,1275,1279,1282],{"class":751,"line":813},[749,1268,1269],{"class":770},"      {",[749,1271,1272],{"class":777}," duration",[749,1274,781],{"class":770},[749,1276,1278],{"class":1277},"sbssI"," 1000",[749,1280,1281],{"class":770}," },",[749,1283,1285],{"class":1284},"sHwdD","          \u002F\u002F slow requests\n",[749,1287,1288,1290,1293,1295,1298,1300],{"class":751,"line":834},[749,1289,1269],{"class":770},[749,1291,1292],{"class":777}," status",[749,1294,781],{"class":770},[749,1296,1297],{"class":1277}," 400",[749,1299,1281],{"class":770},[749,1301,1302],{"class":1284},"             \u002F\u002F client\u002Fserver errors\n",[749,1304,1305,1307,1310,1312,1314,1317,1319,1321],{"class":751,"line":840},[749,1306,1269],{"class":770},[749,1308,1309],{"class":777}," path",[749,1311,781],{"class":770},[749,1313,968],{"class":770},[749,1315,1316],{"class":790},"\u002Fapi\u002Fcritical\u002F**",[749,1318,787],{"class":770},[749,1320,1281],{"class":770},[749,1322,1323],{"class":1284}," \u002F\u002F critical paths\n",[749,1325,1326,1329],{"class":751,"line":1074},[749,1327,1328],{"class":777},"    ]",[749,1330,799],{"class":770},[749,1332,1333],{"class":751,"line":1079},[749,1334,837],{"class":770},[749,1336,1337],{"class":751,"line":1102},[749,1338,1339],{"class":770},"}\n",[516,1341,1342,1343,1345],{},"The ",[543,1344,1219],{}," hook also fires, letting you force-keep based on custom business logic:",[739,1347,1350],{"className":741,"code":1348,"filename":1349,"language":744,"meta":745,"style":745},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:emit:keep', (ctx) => {\n    if (ctx.context.user?.premium) {\n      ctx.shouldKeep = true\n    }\n  })\n})\n","server\u002Fplugins\u002Fevlog-custom.ts",[543,1351,1352,1376,1413,1443,1460,1465,1472],{"__ignoreMap":745},[749,1353,1354,1356,1358,1361,1363,1365,1369,1371,1374],{"class":751,"line":752},[749,1355,756],{"class":755},[749,1357,759],{"class":755},[749,1359,1360],{"class":762}," defineNitroPlugin",[749,1362,767],{"class":766},[749,1364,767],{"class":770},[749,1366,1368],{"class":1367},"sHdIc","nitroApp",[749,1370,1186],{"class":770},[749,1372,1373],{"class":985}," =>",[749,1375,810],{"class":770},[749,1377,1378,1381,1383,1386,1388,1391,1393,1395,1397,1399,1401,1404,1407,1409,1411],{"class":751,"line":774},[749,1379,1380],{"class":766},"  nitroApp",[749,1382,709],{"class":770},[749,1384,1385],{"class":766},"hooks",[749,1387,709],{"class":770},[749,1389,1390],{"class":762},"hook",[749,1392,767],{"class":777},[749,1394,787],{"class":770},[749,1396,1219],{"class":790},[749,1398,787],{"class":770},[749,1400,1053],{"class":770},[749,1402,1403],{"class":770}," (",[749,1405,1406],{"class":1367},"ctx",[749,1408,1186],{"class":770},[749,1410,1373],{"class":985},[749,1412,810],{"class":770},[749,1414,1415,1418,1420,1422,1424,1427,1429,1432,1435,1438,1441],{"class":751,"line":802},[749,1416,1417],{"class":755},"    if",[749,1419,1403],{"class":777},[749,1421,1406],{"class":766},[749,1423,709],{"class":770},[749,1425,1426],{"class":766},"context",[749,1428,709],{"class":770},[749,1430,1431],{"class":766},"user",[749,1433,1434],{"class":770},"?.",[749,1436,1437],{"class":766},"premium",[749,1439,1440],{"class":777},") ",[749,1442,771],{"class":770},[749,1444,1445,1448,1450,1453,1456],{"class":751,"line":813},[749,1446,1447],{"class":766},"      ctx",[749,1449,709],{"class":770},[749,1451,1452],{"class":766},"shouldKeep",[749,1454,1455],{"class":770}," =",[749,1457,1459],{"class":1458},"sfNiH"," true\n",[749,1461,1462],{"class":751,"line":834},[749,1463,1464],{"class":770},"    }\n",[749,1466,1467,1470],{"class":751,"line":840},[749,1468,1469],{"class":770},"  }",[749,1471,846],{"class":777},[749,1473,1474,1476],{"class":751,"line":1074},[749,1475,843],{"class":770},[749,1477,846],{"class":766},[516,1479,1480,1481,1484,1485,709],{},"If any rule or hook sets ",[543,1482,1483],{},"shouldKeep = true",", the event ",[568,1486,1487],{},"bypasses head sampling entirely",[718,1489,1491],{"id":1490},"_6-head-sampling","6. Head Sampling",[516,1493,1494],{},"If the event wasn't force-kept by tail sampling, head sampling applies. This is a random coin flip per log level.",[516,1496,1497,1498,1501],{},"By default, all levels are kept at 100% (no sampling). Configure ",[543,1499,1500],{},"sampling.rates"," to reduce volume in production:",[739,1503,1505],{"className":741,"code":1504,"filename":743,"language":744,"meta":745,"style":745},"evlog: {\n  sampling: {\n    rates: { info: 10, warn: 50, debug: 0 },\n  },\n}\n",[543,1506,1507,1515,1523,1563,1567],{"__ignoreMap":745},[749,1508,1509,1511,1513],{"class":751,"line":752},[749,1510,971],{"class":1241},[749,1512,781],{"class":770},[749,1514,810],{"class":770},[749,1516,1517,1519,1521],{"class":751,"line":774},[749,1518,1250],{"class":1241},[749,1520,781],{"class":770},[749,1522,810],{"class":770},[749,1524,1525,1528,1530,1532,1535,1537,1540,1542,1545,1547,1550,1552,1555,1557,1560],{"class":751,"line":802},[749,1526,1527],{"class":1241},"    rates",[749,1529,781],{"class":770},[749,1531,956],{"class":770},[749,1533,1534],{"class":1241}," info",[749,1536,781],{"class":770},[749,1538,1539],{"class":1277}," 10",[749,1541,1053],{"class":770},[749,1543,1544],{"class":1241}," warn",[749,1546,781],{"class":770},[749,1548,1549],{"class":1277}," 50",[749,1551,1053],{"class":770},[749,1553,1554],{"class":1241}," debug",[749,1556,781],{"class":770},[749,1558,1559],{"class":1277}," 0",[749,1561,1562],{"class":770}," },\n",[749,1564,1565],{"class":751,"line":813},[749,1566,837],{"class":770},[749,1568,1569],{"class":751,"line":834},[749,1570,1339],{"class":770},[1171,1572,1573,1579,1585],{},[1174,1574,1575,1578],{},[543,1576,1577],{},"info: 10"," - keep 10% of info-level events",[1174,1580,1581,1584],{},[543,1582,1583],{},"warn: 50"," - keep 50% of warnings",[1174,1586,1587,1589,1590,1593],{},[543,1588,690],{}," defaults to ",[568,1591,1592],{},"100%"," (never sampled out, even if you set a rate)",[516,1595,1596],{},"If the event is sampled out, processing stops entirely: no console output, no enrichment, no drain.",[718,1598,1600],{"id":1599},"_7-emit","7. Emit",[516,1602,1342,1603,1606],{},[543,1604,1605],{},"WideEvent"," object is built from the accumulated context:",[739,1608,1612],{"className":1609,"code":1610,"filename":1605,"language":1611,"meta":745,"style":745},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"timestamp\": \"2026-01-15T10:30:00.000Z\",\n  \"level\": \"info\",\n  \"service\": \"my-app\",\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Fcheckout\",\n  \"requestId\": \"abc-123\",\n  \"duration\": 234,\n  \"status\": 200,\n  \"user\": { \"id\": 1, \"plan\": \"pro\" },\n  \"cart\": { \"items\": 3, \"total\": 9999 }\n}\n","json",[543,1613,1614,1618,1641,1660,1680,1698,1717,1736,1752,1767,1811,1853],{"__ignoreMap":745},[749,1615,1616],{"class":751,"line":752},[749,1617,771],{"class":770},[749,1619,1620,1623,1626,1629,1631,1634,1637,1639],{"class":751,"line":774},[749,1621,1622],{"class":770},"  \"",[749,1624,1625],{"class":985},"timestamp",[749,1627,1628],{"class":770},"\"",[749,1630,781],{"class":770},[749,1632,1633],{"class":770}," \"",[749,1635,1636],{"class":790},"2026-01-15T10:30:00.000Z",[749,1638,1628],{"class":770},[749,1640,799],{"class":770},[749,1642,1643,1645,1648,1650,1652,1654,1656,1658],{"class":751,"line":802},[749,1644,1622],{"class":770},[749,1646,1647],{"class":985},"level",[749,1649,1628],{"class":770},[749,1651,781],{"class":770},[749,1653,1633],{"class":770},[749,1655,693],{"class":790},[749,1657,1628],{"class":770},[749,1659,799],{"class":770},[749,1661,1662,1664,1667,1669,1671,1673,1676,1678],{"class":751,"line":813},[749,1663,1622],{"class":770},[749,1665,1666],{"class":985},"service",[749,1668,1628],{"class":770},[749,1670,781],{"class":770},[749,1672,1633],{"class":770},[749,1674,1675],{"class":790},"my-app",[749,1677,1628],{"class":770},[749,1679,799],{"class":770},[749,1681,1682,1684,1686,1688,1690,1692,1694,1696],{"class":751,"line":834},[749,1683,1622],{"class":770},[749,1685,878],{"class":985},[749,1687,1628],{"class":770},[749,1689,781],{"class":770},[749,1691,1633],{"class":770},[749,1693,888],{"class":790},[749,1695,1628],{"class":770},[749,1697,799],{"class":770},[749,1699,1700,1702,1704,1706,1708,1710,1713,1715],{"class":751,"line":840},[749,1701,1622],{"class":770},[749,1703,896],{"class":985},[749,1705,1628],{"class":770},[749,1707,781],{"class":770},[749,1709,1633],{"class":770},[749,1711,1712],{"class":790},"\u002Fapi\u002Fcheckout",[749,1714,1628],{"class":770},[749,1716,799],{"class":770},[749,1718,1719,1721,1723,1725,1727,1729,1732,1734],{"class":751,"line":1074},[749,1720,1622],{"class":770},[749,1722,906],{"class":985},[749,1724,1628],{"class":770},[749,1726,781],{"class":770},[749,1728,1633],{"class":770},[749,1730,1731],{"class":790},"abc-123",[749,1733,1628],{"class":770},[749,1735,799],{"class":770},[749,1737,1738,1740,1743,1745,1747,1750],{"class":751,"line":1079},[749,1739,1622],{"class":770},[749,1741,1742],{"class":985},"duration",[749,1744,1628],{"class":770},[749,1746,781],{"class":770},[749,1748,1749],{"class":1277}," 234",[749,1751,799],{"class":770},[749,1753,1754,1756,1758,1760,1762,1765],{"class":751,"line":1102},[749,1755,1622],{"class":770},[749,1757,1182],{"class":985},[749,1759,1628],{"class":770},[749,1761,781],{"class":770},[749,1763,1764],{"class":1277}," 200",[749,1766,799],{"class":770},[749,1768,1770,1772,1774,1776,1778,1780,1782,1784,1786,1788,1791,1793,1795,1798,1800,1802,1804,1807,1809],{"class":751,"line":1769},10,[749,1771,1622],{"class":770},[749,1773,1431],{"class":985},[749,1775,1628],{"class":770},[749,1777,781],{"class":770},[749,1779,956],{"class":770},[749,1781,1633],{"class":770},[749,1783,1050],{"class":1241},[749,1785,1628],{"class":770},[749,1787,781],{"class":770},[749,1789,1790],{"class":1277}," 1",[749,1792,1053],{"class":770},[749,1794,1633],{"class":770},[749,1796,1797],{"class":1241},"plan",[749,1799,1628],{"class":770},[749,1801,781],{"class":770},[749,1803,1633],{"class":770},[749,1805,1806],{"class":790},"pro",[749,1808,1628],{"class":770},[749,1810,1562],{"class":770},[749,1812,1814,1816,1819,1821,1823,1825,1827,1829,1831,1833,1836,1838,1840,1843,1845,1847,1850],{"class":751,"line":1813},11,[749,1815,1622],{"class":770},[749,1817,1818],{"class":985},"cart",[749,1820,1628],{"class":770},[749,1822,781],{"class":770},[749,1824,956],{"class":770},[749,1826,1633],{"class":770},[749,1828,1131],{"class":1241},[749,1830,1628],{"class":770},[749,1832,781],{"class":770},[749,1834,1835],{"class":1277}," 3",[749,1837,1053],{"class":770},[749,1839,1633],{"class":770},[749,1841,1842],{"class":1241},"total",[749,1844,1628],{"class":770},[749,1846,781],{"class":770},[749,1848,1849],{"class":1277}," 9999",[749,1851,1852],{"class":770}," }\n",[749,1854,1856],{"class":751,"line":1855},12,[749,1857,1339],{"class":770},[516,1859,1860],{},"The event is printed to the console, pretty-formatted in development and as JSON in production. This is the default behavior, no configuration needed.",[718,1862,1864,1865,1186],{"id":1863},"_8-enrich-evlogenrich","8. Enrich (",[543,1866,1867],{},"evlog:enrich",[516,1869,1870],{},"After emission, enrichers add derived context to the event. Built-in enrichers extract data from request headers:",[528,1872,1873,1885],{},[531,1874,1875],{},[534,1876,1877,1880,1883],{},[537,1878,1879],{},"Enricher",[537,1881,1882],{},"Adds",[537,1884,869],{},[560,1886,1887,1904,1918,1935],{},[534,1888,1889,1892,1898],{},[565,1890,1891],{},"User Agent",[565,1893,1894,1897],{},[543,1895,1896],{},"userAgent"," (browser, OS, device)",[565,1899,1900,1903],{},[543,1901,1902],{},"User-Agent"," header",[534,1905,1906,1909,1915],{},[565,1907,1908],{},"Geo",[565,1910,1911,1914],{},[543,1912,1913],{},"geo"," (country, region, city)",[565,1916,1917],{},"Platform headers (Vercel, Cloudflare)",[534,1919,1920,1923,1929],{},[565,1921,1922],{},"Request Size",[565,1924,1925,1928],{},[543,1926,1927],{},"requestSize"," (request\u002Fresponse bytes)",[565,1930,1931,1934],{},[543,1932,1933],{},"Content-Length"," headers",[534,1936,1937,1940,1946],{},[565,1938,1939],{},"Trace Context",[565,1941,1942,1945],{},[543,1943,1944],{},"traceContext"," (traceId, spanId)",[565,1947,1948,1903],{},[543,1949,1950],{},"traceparent",[739,1952,1955],{"className":741,"code":1953,"filename":1954,"language":744,"meta":745,"style":745},"import { createUserAgentEnricher, createGeoEnricher } from 'evlog\u002Fenrichers'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const enrichers = [createUserAgentEnricher(), createGeoEnricher()]\n\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n  })\n})\n","server\u002Fplugins\u002Fevlog-enrich.ts",[543,1956,1957,1982,1986,2006,2031,2035,2067,2095,2101],{"__ignoreMap":745},[749,1958,1959,1961,1963,1966,1968,1971,1973,1975,1977,1980],{"class":751,"line":752},[749,1960,953],{"class":755},[749,1962,956],{"class":770},[749,1964,1965],{"class":766}," createUserAgentEnricher",[749,1967,1053],{"class":770},[749,1969,1970],{"class":766}," createGeoEnricher",[749,1972,962],{"class":770},[749,1974,965],{"class":755},[749,1976,968],{"class":770},[749,1978,1979],{"class":790},"evlog\u002Fenrichers",[749,1981,974],{"class":770},[749,1983,1984],{"class":751,"line":774},[749,1985,980],{"emptyLinePlaceholder":979},[749,1987,1988,1990,1992,1994,1996,1998,2000,2002,2004],{"class":751,"line":802},[749,1989,756],{"class":755},[749,1991,759],{"class":755},[749,1993,1360],{"class":762},[749,1995,767],{"class":766},[749,1997,767],{"class":770},[749,1999,1368],{"class":1367},[749,2001,1186],{"class":770},[749,2003,1373],{"class":985},[749,2005,810],{"class":770},[749,2007,2008,2011,2014,2016,2018,2021,2024,2026,2028],{"class":751,"line":813},[749,2009,2010],{"class":985},"  const",[749,2012,2013],{"class":766}," enrichers",[749,2015,1455],{"class":770},[749,2017,784],{"class":777},[749,2019,2020],{"class":762},"createUserAgentEnricher",[749,2022,2023],{"class":777},"()",[749,2025,1053],{"class":770},[749,2027,1970],{"class":762},[749,2029,2030],{"class":777},"()]\n",[749,2032,2033],{"class":751,"line":834},[749,2034,980],{"emptyLinePlaceholder":979},[749,2036,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063,2065],{"class":751,"line":840},[749,2038,1380],{"class":766},[749,2040,709],{"class":770},[749,2042,1385],{"class":766},[749,2044,709],{"class":770},[749,2046,1390],{"class":762},[749,2048,767],{"class":777},[749,2050,787],{"class":770},[749,2052,1867],{"class":790},[749,2054,787],{"class":770},[749,2056,1053],{"class":770},[749,2058,1403],{"class":770},[749,2060,1406],{"class":1367},[749,2062,1186],{"class":770},[749,2064,1373],{"class":985},[749,2066,810],{"class":770},[749,2068,2069,2072,2074,2076,2079,2082,2084,2086,2089,2091,2093],{"class":751,"line":1074},[749,2070,2071],{"class":755},"    for",[749,2073,1403],{"class":777},[749,2075,986],{"class":985},[749,2077,2078],{"class":766}," enricher",[749,2080,2081],{"class":770}," of",[749,2083,2013],{"class":766},[749,2085,1440],{"class":777},[749,2087,2088],{"class":762},"enricher",[749,2090,767],{"class":777},[749,2092,1406],{"class":766},[749,2094,846],{"class":777},[749,2096,2097,2099],{"class":751,"line":1079},[749,2098,1469],{"class":770},[749,2100,846],{"class":777},[749,2102,2103,2105],{"class":751,"line":1102},[749,2104,843],{"class":770},[749,2106,846],{"class":766},[516,2108,2109,2110,2113],{},"Enrichers receive the full ",[543,2111,2112],{},"EnrichContext"," with the mutable event, request metadata, safe headers, and response info.",[718,2115,2117,2118,1186],{"id":2116},"_9-drain-evlogdrain","9. Drain (",[543,2119,2120],{},"evlog:drain",[516,2122,2123,2124,2126,2127,2130],{},"The final step sends the enriched event to your observability platform. The ",[543,2125,2120],{}," hook receives a ",[543,2128,2129],{},"DrainContext"," with the complete event:",[739,2132,2135],{"className":741,"code":2133,"filename":2134,"language":744,"meta":745,"style":745},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', createAxiomDrain())\n})\n","server\u002Fplugins\u002Fevlog-drain.ts",[543,2136,2137,2157,2161,2181,2208],{"__ignoreMap":745},[749,2138,2139,2141,2143,2146,2148,2150,2152,2155],{"class":751,"line":752},[749,2140,953],{"class":755},[749,2142,956],{"class":770},[749,2144,2145],{"class":766}," createAxiomDrain",[749,2147,962],{"class":770},[749,2149,965],{"class":755},[749,2151,968],{"class":770},[749,2153,2154],{"class":790},"evlog\u002Faxiom",[749,2156,974],{"class":770},[749,2158,2159],{"class":751,"line":774},[749,2160,980],{"emptyLinePlaceholder":979},[749,2162,2163,2165,2167,2169,2171,2173,2175,2177,2179],{"class":751,"line":802},[749,2164,756],{"class":755},[749,2166,759],{"class":755},[749,2168,1360],{"class":762},[749,2170,767],{"class":766},[749,2172,767],{"class":770},[749,2174,1368],{"class":1367},[749,2176,1186],{"class":770},[749,2178,1373],{"class":985},[749,2180,810],{"class":770},[749,2182,2183,2185,2187,2189,2191,2193,2195,2197,2199,2201,2203,2205],{"class":751,"line":813},[749,2184,1380],{"class":766},[749,2186,709],{"class":770},[749,2188,1385],{"class":766},[749,2190,709],{"class":770},[749,2192,1390],{"class":762},[749,2194,767],{"class":777},[749,2196,787],{"class":770},[749,2198,2120],{"class":790},[749,2200,787],{"class":770},[749,2202,1053],{"class":770},[749,2204,2145],{"class":762},[749,2206,2207],{"class":777},"())\n",[749,2209,2210,2212],{"class":751,"line":834},[749,2211,843],{"class":770},[749,2213,846],{"class":766},[516,2215,2216,2217,2220],{},"On platforms with ",[543,2218,2219],{},"waitUntil"," (Cloudflare Workers, Vercel Edge), the drain runs after the response is sent to avoid adding latency. On traditional servers, the drain is awaited to prevent losing events in serverless cold shutdowns.",[523,2222,2224],{"id":2223},"hook-execution-order","Hook Execution Order",[528,2226,2227,2243],{},[531,2228,2229],{},[534,2230,2231,2234,2237,2240],{},[537,2232,2233],{},"Order",[537,2235,2236],{},"Hook",[537,2238,2239],{},"When",[537,2241,2242],{},"Purpose",[560,2244,2245,2260,2275],{},[534,2246,2247,2250,2254,2257],{},[565,2248,2249],{},"1",[565,2251,2252],{},[543,2253,1219],{},[565,2255,2256],{},"After request ends, before sampling",[565,2258,2259],{},"Force-keep events based on outcome",[534,2261,2262,2265,2269,2272],{},[565,2263,2264],{},"2",[565,2266,2267],{},[543,2268,1867],{},[565,2270,2271],{},"After emit, before drain",[565,2273,2274],{},"Add derived context to the event",[534,2276,2277,2280,2284,2287],{},[565,2278,2279],{},"3",[565,2281,2282],{},[543,2283,2120],{},[565,2285,2286],{},"After enrichment",[565,2288,2289],{},"Send event to external services",[523,2291,2293],{"id":2292},"error-vs-success-path","Error vs Success Path",[516,2295,2296,2297,2300],{},"Both paths converge at the same emit\u002Fenrich\u002Fdrain pipeline. The only difference is ",[1228,2298,2299],{},"when"," the emit is triggered:",[528,2302,2303,2315],{},[531,2304,2305],{},[534,2306,2307,2309,2312],{},[537,2308],{},[537,2310,2311],{},"Success",[537,2313,2314],{},"Error",[560,2316,2317,2337,2355,2371,2392],{},[534,2318,2319,2324,2333],{},[565,2320,2321],{},[568,2322,2323],{},"Trigger",[565,2325,2326,552,2329,2332],{},[543,2327,2328],{},"afterResponse",[543,2330,2331],{},"response"," hook",[565,2334,2335,2332],{},[543,2336,690],{},[534,2338,2339,2343,2351],{},[565,2340,2341],{},[568,2342,1200],{},[565,2344,2345,2347,2348,2350],{},[543,2346,693],{}," (or ",[543,2349,696],{}," if status >= 400)",[565,2352,2353],{},[543,2354,690],{},[534,2356,2357,2362,2365],{},[565,2358,2359],{},[568,2360,2361],{},"Status",[565,2363,2364],{},"From response",[565,2366,2367,2368,2370],{},"From error's ",[543,2369,1182],{}," field (default 500)",[534,2372,2373,2378,2381],{},[565,2374,2375],{},[568,2376,2377],{},"Error context",[565,2379,2380],{},"None",[565,2382,2383,2385,2386,885,2389],{},[543,2384,690],{}," field with message, stack, ",[543,2387,2388],{},"why",[543,2390,2391],{},"fix",[534,2393,2394,2399,2406],{},[565,2395,2396],{},[568,2397,2398],{},"Double-emit guard",[565,2400,2401,2402,2405],{},"Checks ",[543,2403,2404],{},"_evlogEmitted"," flag",[565,2407,2408,2409],{},"Sets ",[543,2410,2411],{},"_evlogEmitted = true",[523,2413,2415],{"id":2414},"simple-logging-pipeline","Simple Logging Pipeline",[516,2417,2418,2419,2421],{},"When using the ",[543,2420,545],{}," singleton, the pipeline is shorter:",[2423,2424,2425,2437,2442],"ol",{},[1174,2426,2427,2430,2431,579,2434],{},[568,2428,2429],{},"Call",": ",[543,2432,2433],{},"log.info({ action: 'deploy' })",[543,2435,2436],{},"log.info('tag', 'message')",[1174,2438,2439,2441],{},[568,2440,616],{},": The event is built and printed immediately",[1174,2443,2444,2446,2447,2450,2451,2454],{},[568,2445,665],{},": If a global ",[543,2448,2449],{},"drain"," was configured via ",[543,2452,2453],{},"initLogger()",", the event is sent to external services",[516,2456,2457,2458,2460,2461,2464],{},"Tagged logs (",[543,2459,2436],{},") are console-only in pretty mode. Object-form logs (",[543,2462,2463],{},"log.info({ ... })",") always flow through the drain pipeline.",[523,2466,2468],{"id":2467},"standalone-wide-event-pipeline","Standalone Wide Event Pipeline",[516,2470,2471,2472,2475],{},"When using ",[543,2473,2474],{},"createLogger()"," outside a framework:",[2423,2477,2478,2485,2501,2509,2517],{},[1174,2479,2480,2430,2482],{},[568,2481,570],{},[543,2483,2484],{},"createLogger({ jobId: 'sync-001' })",[1174,2486,2487,2430,2489,885,2491,885,2494,885,2497,2500],{},[568,2488,592],{},[543,2490,600],{},[543,2492,2493],{},"log.info()",[543,2495,2496],{},"log.warn()",[543,2498,2499],{},"log.error()"," over the operation",[1174,2502,2503,2505,2506,2508],{},[568,2504,616],{},": Manual ",[543,2507,625],{}," call",[1174,2510,2511,2513,2514],{},[568,2512,635],{},": Head sampling applies based on computed level. Tail sampling via ",[543,2515,2516],{},"initLogger({ sampling: { keep: [...] } })",[1174,2518,2519,2446,2521,2523],{},[568,2520,665],{},[543,2522,2449],{}," was configured, the event is sent",[739,2525,2528],{"className":741,"code":2526,"filename":2527,"language":744,"meta":745,"style":745},"import { initLogger, createLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\ninitLogger({\n  env: { service: 'worker' },\n  drain: createAxiomDrain(),\n  sampling: { rates: { info: 10 } },\n})\n\nconst log = createLogger({ task: 'migrate' })\nlog.set({ records: 500, status: 'complete' })\nlog.emit()\n","scripts\u002Fmigrate.ts",[543,2529,2530,2554,2572,2576,2585,2608,2621,2646,2652,2656,2686,2723],{"__ignoreMap":745},[749,2531,2532,2534,2536,2539,2541,2544,2546,2548,2550,2552],{"class":751,"line":752},[749,2533,953],{"class":755},[749,2535,956],{"class":770},[749,2537,2538],{"class":766}," initLogger",[749,2540,1053],{"class":770},[749,2542,2543],{"class":766}," createLogger",[749,2545,962],{"class":770},[749,2547,965],{"class":755},[749,2549,968],{"class":770},[749,2551,971],{"class":790},[749,2553,974],{"class":770},[749,2555,2556,2558,2560,2562,2564,2566,2568,2570],{"class":751,"line":774},[749,2557,953],{"class":755},[749,2559,956],{"class":770},[749,2561,2145],{"class":766},[749,2563,962],{"class":770},[749,2565,965],{"class":755},[749,2567,968],{"class":770},[749,2569,2154],{"class":790},[749,2571,974],{"class":770},[749,2573,2574],{"class":751,"line":802},[749,2575,980],{"emptyLinePlaceholder":979},[749,2577,2578,2581,2583],{"class":751,"line":813},[749,2579,2580],{"class":762},"initLogger",[749,2582,767],{"class":766},[749,2584,771],{"class":770},[749,2586,2587,2590,2592,2594,2597,2599,2601,2604,2606],{"class":751,"line":834},[749,2588,2589],{"class":777},"  env",[749,2591,781],{"class":770},[749,2593,956],{"class":770},[749,2595,2596],{"class":777}," service",[749,2598,781],{"class":770},[749,2600,968],{"class":770},[749,2602,2603],{"class":790},"worker",[749,2605,787],{"class":770},[749,2607,1562],{"class":770},[749,2609,2610,2613,2615,2617,2619],{"class":751,"line":840},[749,2611,2612],{"class":777},"  drain",[749,2614,781],{"class":770},[749,2616,2145],{"class":762},[749,2618,2023],{"class":766},[749,2620,799],{"class":770},[749,2622,2623,2625,2627,2629,2632,2634,2636,2638,2640,2642,2644],{"class":751,"line":1074},[749,2624,1250],{"class":777},[749,2626,781],{"class":770},[749,2628,956],{"class":770},[749,2630,2631],{"class":777}," rates",[749,2633,781],{"class":770},[749,2635,956],{"class":770},[749,2637,1534],{"class":777},[749,2639,781],{"class":770},[749,2641,1539],{"class":1277},[749,2643,962],{"class":770},[749,2645,1562],{"class":770},[749,2647,2648,2650],{"class":751,"line":1079},[749,2649,843],{"class":770},[749,2651,846],{"class":766},[749,2653,2654],{"class":751,"line":1102},[749,2655,980],{"emptyLinePlaceholder":979},[749,2657,2658,2660,2662,2664,2666,2668,2670,2673,2675,2677,2680,2682,2684],{"class":751,"line":1769},[749,2659,986],{"class":985},[749,2661,989],{"class":766},[749,2663,992],{"class":770},[749,2665,2543],{"class":762},[749,2667,767],{"class":766},[749,2669,1031],{"class":770},[749,2671,2672],{"class":777}," task",[749,2674,781],{"class":770},[749,2676,968],{"class":770},[749,2678,2679],{"class":790},"migrate",[749,2681,787],{"class":770},[749,2683,962],{"class":770},[749,2685,846],{"class":766},[749,2687,2688,2690,2692,2694,2696,2698,2701,2703,2706,2708,2710,2712,2714,2717,2719,2721],{"class":751,"line":1813},[749,2689,545],{"class":766},[749,2691,709],{"class":770},[749,2693,687],{"class":762},[749,2695,767],{"class":766},[749,2697,1031],{"class":770},[749,2699,2700],{"class":777}," records",[749,2702,781],{"class":770},[749,2704,2705],{"class":1277}," 500",[749,2707,1053],{"class":770},[749,2709,1292],{"class":777},[749,2711,781],{"class":770},[749,2713,968],{"class":770},[749,2715,2716],{"class":790},"complete",[749,2718,787],{"class":770},[749,2720,962],{"class":770},[749,2722,846],{"class":766},[749,2724,2725,2727,2729,2731],{"class":751,"line":1855},[749,2726,545],{"class":766},[749,2728,709],{"class":770},[749,2730,679],{"class":762},[749,2732,2733],{"class":766},"()\n",[523,2735,2737],{"id":2736},"next-steps","Next Steps",[1171,2739,2740,2745,2750,2755],{},[1174,2741,2742,2744],{},[705,2743,46],{"href":47}," - Design effective wide events",[1174,2746,2747,2749],{},[705,2748,61],{"href":62}," - Configure head and tail sampling",[1174,2751,2752,2754],{},[705,2753,133],{"href":138}," - Send events to external platforms",[1174,2756,2757,2759],{},[705,2758,416],{"href":417}," - Add derived context automatically",[2761,2762,2763],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":745,"searchDepth":774,"depth":774,"links":2765},[2766,2767,2781,2782,2783,2784,2785],{"id":525,"depth":774,"text":526},{"id":712,"depth":774,"text":713,"children":2768},[2769,2770,2771,2772,2773,2775,2776,2777,2779],{"id":720,"depth":802,"text":721},{"id":849,"depth":802,"text":850},{"id":935,"depth":802,"text":936},{"id":1165,"depth":802,"text":1166},{"id":1215,"depth":802,"text":2774},"5. Tail Sampling (evlog:emit:keep)",{"id":1490,"depth":802,"text":1491},{"id":1599,"depth":802,"text":1600},{"id":1863,"depth":802,"text":2778},"8. Enrich (evlog:enrich)",{"id":2116,"depth":802,"text":2780},"9. Drain (evlog:drain)",{"id":2223,"depth":774,"text":2224},{"id":2292,"depth":774,"text":2293},{"id":2414,"depth":774,"text":2415},{"id":2467,"depth":774,"text":2468},{"id":2736,"depth":774,"text":2737},"Understand the full lifecycle of an evlog event, from creation to drain. Covers all three modes (simple logging, wide events, request logging), sampling, enrichment, and delivery.","md",[2789,2792],{"label":46,"icon":49,"to":47,"color":2790,"variant":2791},"neutral","subtle",{"label":61,"icon":64,"to":62,"color":2790,"variant":2791},{},{"icon":59},{"title":56,"description":2786},"Yu3uJNclfj3HKmHL5fS-JpUiecOufCrl18HGVzijylE",[2798,2800],{"title":51,"path":52,"stem":53,"description":2799,"icon":54,"children":-1},"Create errors that explain why they occurred and how to fix them. Add actionable context with why, fix, and link fields for humans and AI agents.",{"title":61,"path":62,"stem":63,"description":2801,"icon":64,"children":-1},"Control log volume with two-tier sampling. Head sampling drops noise by level, tail sampling rescues critical events based on outcome. Never miss errors, slow requests, or critical paths.",1785609198599]