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