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