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