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