[{"data":1,"prerenderedAt":1868},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-typed-fields":263,"-core-concepts-typed-fields-surround":1863},[4,30,115,174,233,249],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24],{"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",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Frameworks","\u002Fframeworks","2.frameworks",[35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Fframeworks\u002Foverview","2.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":41,"path":42,"stem":43,"icon":44},"Nuxt","\u002Fframeworks\u002Fnuxt","2.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":46,"path":47,"stem":48,"icon":49},"Next.js","\u002Fframeworks\u002Fnextjs","2.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":51,"path":52,"stem":53,"icon":54},"SvelteKit","\u002Fframeworks\u002Fsveltekit","2.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":56,"path":57,"stem":58,"icon":59},"Nitro","\u002Fframeworks\u002Fnitro","2.frameworks\u002F04.nitro","i-custom-nitro",{"title":61,"path":62,"stem":63,"icon":64},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","2.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":66,"path":67,"stem":68,"icon":69},"NestJS","\u002Fframeworks\u002Fnestjs","2.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":71,"path":72,"stem":73,"icon":74},"Express","\u002Fframeworks\u002Fexpress","2.frameworks\u002F07.express","i-simple-icons-express",{"title":76,"path":77,"stem":78,"icon":79},"Hono","\u002Fframeworks\u002Fhono","2.frameworks\u002F08.hono","i-simple-icons-hono",{"title":81,"path":82,"stem":83,"icon":84},"Fastify","\u002Fframeworks\u002Ffastify","2.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":86,"path":87,"stem":88,"icon":89},"Elysia","\u002Fframeworks\u002Felysia","2.frameworks\u002F10.elysia","i-custom-elysia",{"title":91,"path":92,"stem":93,"icon":94},"React Router","\u002Fframeworks\u002Freact-router","2.frameworks\u002F11.react-router","i-simple-icons-reactrouter",{"title":96,"path":97,"stem":98,"icon":99},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","2.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":101,"path":102,"stem":103,"icon":104},"Standalone","\u002Fframeworks\u002Fstandalone","2.frameworks\u002F13.standalone","i-simple-icons-typescript",{"title":106,"path":107,"stem":108,"icon":109},"Astro","\u002Fframeworks\u002Fastro","2.frameworks\u002F14.astro","i-simple-icons-astro",{"title":111,"path":112,"stem":113,"icon":114},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","2.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":116,"path":117,"stem":118,"children":119,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[120,125,130,135,140,145,150,154,159,164,169],{"title":121,"path":122,"stem":123,"icon":124},"Request Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":126,"path":127,"stem":128,"icon":129},"Wide Events","\u002Fcore-concepts\u002Fwide-events","3.core-concepts\u002F1.wide-events","i-lucide-layers",{"title":131,"path":132,"stem":133,"icon":134},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F10.vite-plugin","i-custom-vite",{"title":136,"path":137,"stem":138,"icon":139},"AI SDK Integration","\u002Fcore-concepts\u002Fai-sdk","3.core-concepts\u002F11.ai-sdk","i-simple-icons-vercel",{"title":141,"path":142,"stem":143,"icon":144},"Structured Errors","\u002Fcore-concepts\u002Fstructured-errors","3.core-concepts\u002F2.structured-errors","i-lucide-shield-alert",{"title":146,"path":147,"stem":148,"icon":149},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F3.best-practices","i-lucide-shield-check",{"title":151,"path":152,"stem":153,"icon":104},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F4.typed-fields",{"title":155,"path":156,"stem":157,"icon":158},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F5.sampling","i-lucide-filter",{"title":160,"path":161,"stem":162,"icon":163},"Client Logging","\u002Fcore-concepts\u002Fclient-logging","3.core-concepts\u002F6.client-logging","i-lucide-monitor",{"title":165,"path":166,"stem":167,"icon":168},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F7.configuration","i-lucide-settings",{"title":170,"path":171,"stem":172,"icon":173},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F8.performance","i-lucide-gauge",{"title":175,"path":176,"stem":177,"children":178,"page":29},"Adapters","\u002Fadapters","4.adapters",[179,183,188,193,198,203,208,213,218,223,228],{"title":36,"path":180,"stem":181,"icon":182},"\u002Fadapters\u002Foverview","4.adapters\u002F1.overview","i-custom-plug",{"title":184,"path":185,"stem":186,"icon":187},"Pipeline","\u002Fadapters\u002Fpipeline","4.adapters\u002F10.pipeline","i-lucide-workflow",{"title":189,"path":190,"stem":191,"icon":192},"Browser","\u002Fadapters\u002Fbrowser","4.adapters\u002F11.browser","i-lucide-globe",{"title":194,"path":195,"stem":196,"icon":197},"Axiom","\u002Fadapters\u002Faxiom","4.adapters\u002F2.axiom","i-custom-axiom",{"title":199,"path":200,"stem":201,"icon":202},"OTLP","\u002Fadapters\u002Fotlp","4.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":204,"path":205,"stem":206,"icon":207},"PostHog","\u002Fadapters\u002Fposthog","4.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":209,"path":210,"stem":211,"icon":212},"Sentry","\u002Fadapters\u002Fsentry","4.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":214,"path":215,"stem":216,"icon":217},"Better Stack","\u002Fadapters\u002Fbetter-stack","4.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":219,"path":220,"stem":221,"icon":222},"File System","\u002Fadapters\u002Ffs","4.adapters\u002F7.fs","i-lucide-hard-drive",{"title":224,"path":225,"stem":226,"icon":227},"HyperDX","\u002Fadapters\u002Fhyperdx","4.adapters\u002F8.hyperdx","i-custom-hyperdx",{"title":229,"path":230,"stem":231,"icon":232},"Custom Adapters","\u002Fadapters\u002Fcustom","4.adapters\u002F9.custom","i-lucide-code",{"title":234,"path":235,"stem":236,"children":237,"page":29},"Enrichers","\u002Fenrichers","5.enrichers",[238,241,245],{"title":36,"path":239,"stem":240,"icon":28},"\u002Fenrichers\u002Foverview","5.enrichers\u002F1.overview",{"title":242,"path":243,"stem":244,"icon":114},"Built-in","\u002Fenrichers\u002Fbuilt-in","5.enrichers\u002F2.built-in",{"title":246,"path":247,"stem":248,"icon":232},"Custom","\u002Fenrichers\u002Fcustom","5.enrichers\u002F3.custom",{"title":250,"path":251,"stem":252,"children":253,"page":29},"NuxtHub","\u002Fnuxthub","6.nuxthub",[254,258],{"title":36,"path":255,"stem":256,"icon":257},"\u002Fnuxthub\u002Foverview","6.nuxthub\u002F1.overview","i-lucide-database",{"title":259,"path":260,"stem":261,"icon":262},"Retention","\u002Fnuxthub\u002Fretention","6.nuxthub\u002F2.retention","i-lucide-clock",{"id":264,"title":151,"body":265,"description":1852,"extension":1853,"links":1854,"meta":1859,"navigation":1860,"path":152,"seo":1861,"stem":153,"__hash__":1862},"docs\u002F3.core-concepts\u002F4.typed-fields.md",{"type":266,"value":267,"toc":1841},"minimark",[268,289,294,300,763,766,770,785,849,858,862,868,937,940,944,959,1092,1095,1099,1109,1405,1409,1414,1417,1595,1701,1705,1708,1837],[269,270,271,272,276,277,280,281,284,285,288],"p",{},"By default, ",[273,274,275],"code",{},"useLogger"," accepts any fields, which is great for getting started. But as your codebase grows, inconsistencies creep in: one route logs ",[273,278,279],{},"user",", another logs ",[273,282,283],{},"account",", a third logs ",[273,286,287],{},"userId",". Typed fields solve this with opt-in compile-time safety.",[290,291,293],"h2",{"id":292},"basic-usage","Basic Usage",[269,295,296,297,299],{},"Define an interface for your fields and pass it as a generic to ",[273,298,275],{},":",[301,302,308],"pre",{"className":303,"code":304,"filename":305,"language":306,"meta":307,"style":307},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { useLogger } from 'evlog'\n\ninterface CheckoutFields {\n  user: { id: string; plan: string }\n  cart: { items: number; total: number }\n  action: string\n}\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger\u003CCheckoutFields>(event)\n\n  log.set({ user: { id: '123', plan: 'pro' } })  \u002F\u002F OK\n  log.set({ cart: { items: 3, total: 9999 } })    \u002F\u002F OK\n  log.set({ action: 'checkout' })                  \u002F\u002F OK\n\n  log.set({ account: '...' })                      \u002F\u002F TS error\n  log.set({ usr: { id: '123' } })                  \u002F\u002F TS error\n\n  return { success: true }\n})\n","server\u002Fapi\u002Fcheckout.post.ts","typescript","",[273,309,310,343,350,364,396,425,436,442,447,481,511,516,577,623,655,660,693,731,736,755],{"__ignoreMap":307},[311,312,315,319,323,327,330,333,336,340],"span",{"class":313,"line":314},"line",1,[311,316,318],{"class":317},"s7zQu","import",[311,320,322],{"class":321},"sMK4o"," {",[311,324,326],{"class":325},"sTEyZ"," useLogger",[311,328,329],{"class":321}," }",[311,331,332],{"class":317}," from",[311,334,335],{"class":321}," '",[311,337,339],{"class":338},"sfazB","evlog",[311,341,342],{"class":321},"'\n",[311,344,346],{"class":313,"line":345},2,[311,347,349],{"emptyLinePlaceholder":348},true,"\n",[311,351,353,357,361],{"class":313,"line":352},3,[311,354,356],{"class":355},"spNyl","interface",[311,358,360],{"class":359},"sBMFI"," CheckoutFields",[311,362,363],{"class":321}," {\n",[311,365,367,371,373,375,378,380,383,386,389,391,393],{"class":313,"line":366},4,[311,368,370],{"class":369},"swJcz","  user",[311,372,299],{"class":321},[311,374,322],{"class":321},[311,376,377],{"class":369}," id",[311,379,299],{"class":321},[311,381,382],{"class":359}," string",[311,384,385],{"class":321},";",[311,387,388],{"class":369}," plan",[311,390,299],{"class":321},[311,392,382],{"class":359},[311,394,395],{"class":321}," }\n",[311,397,399,402,404,406,409,411,414,416,419,421,423],{"class":313,"line":398},5,[311,400,401],{"class":369},"  cart",[311,403,299],{"class":321},[311,405,322],{"class":321},[311,407,408],{"class":369}," items",[311,410,299],{"class":321},[311,412,413],{"class":359}," number",[311,415,385],{"class":321},[311,417,418],{"class":369}," total",[311,420,299],{"class":321},[311,422,413],{"class":359},[311,424,395],{"class":321},[311,426,428,431,433],{"class":313,"line":427},6,[311,429,430],{"class":369},"  action",[311,432,299],{"class":321},[311,434,435],{"class":359}," string\n",[311,437,439],{"class":313,"line":438},7,[311,440,441],{"class":321},"}\n",[311,443,445],{"class":313,"line":444},8,[311,446,349],{"emptyLinePlaceholder":348},[311,448,450,453,456,460,463,466,469,473,476,479],{"class":313,"line":449},9,[311,451,452],{"class":317},"export",[311,454,455],{"class":317}," default",[311,457,459],{"class":458},"s2Zo4"," defineEventHandler",[311,461,462],{"class":325},"(",[311,464,465],{"class":355},"async",[311,467,468],{"class":321}," (",[311,470,472],{"class":471},"sHdIc","event",[311,474,475],{"class":321},")",[311,477,478],{"class":355}," =>",[311,480,363],{"class":321},[311,482,484,487,490,493,495,498,501,504,506,508],{"class":313,"line":483},10,[311,485,486],{"class":355},"  const",[311,488,489],{"class":325}," log",[311,491,492],{"class":321}," =",[311,494,326],{"class":458},[311,496,497],{"class":321},"\u003C",[311,499,500],{"class":359},"CheckoutFields",[311,502,503],{"class":321},">",[311,505,462],{"class":369},[311,507,472],{"class":325},[311,509,510],{"class":369},")\n",[311,512,514],{"class":313,"line":513},11,[311,515,349],{"emptyLinePlaceholder":348},[311,517,519,522,525,528,530,533,536,538,540,542,544,546,549,552,555,557,559,561,564,566,568,570,573],{"class":313,"line":518},12,[311,520,521],{"class":325},"  log",[311,523,524],{"class":321},".",[311,526,527],{"class":458},"set",[311,529,462],{"class":369},[311,531,532],{"class":321},"{",[311,534,535],{"class":369}," user",[311,537,299],{"class":321},[311,539,322],{"class":321},[311,541,377],{"class":369},[311,543,299],{"class":321},[311,545,335],{"class":321},[311,547,548],{"class":338},"123",[311,550,551],{"class":321},"'",[311,553,554],{"class":321},",",[311,556,388],{"class":369},[311,558,299],{"class":321},[311,560,335],{"class":321},[311,562,563],{"class":338},"pro",[311,565,551],{"class":321},[311,567,329],{"class":321},[311,569,329],{"class":321},[311,571,572],{"class":369},")  ",[311,574,576],{"class":575},"sHwdD","\u002F\u002F OK\n",[311,578,580,582,584,586,588,590,593,595,597,599,601,605,607,609,611,614,616,618,621],{"class":313,"line":579},13,[311,581,521],{"class":325},[311,583,524],{"class":321},[311,585,527],{"class":458},[311,587,462],{"class":369},[311,589,532],{"class":321},[311,591,592],{"class":369}," cart",[311,594,299],{"class":321},[311,596,322],{"class":321},[311,598,408],{"class":369},[311,600,299],{"class":321},[311,602,604],{"class":603},"sbssI"," 3",[311,606,554],{"class":321},[311,608,418],{"class":369},[311,610,299],{"class":321},[311,612,613],{"class":603}," 9999",[311,615,329],{"class":321},[311,617,329],{"class":321},[311,619,620],{"class":369},")    ",[311,622,576],{"class":575},[311,624,626,628,630,632,634,636,639,641,643,646,648,650,653],{"class":313,"line":625},14,[311,627,521],{"class":325},[311,629,524],{"class":321},[311,631,527],{"class":458},[311,633,462],{"class":369},[311,635,532],{"class":321},[311,637,638],{"class":369}," action",[311,640,299],{"class":321},[311,642,335],{"class":321},[311,644,645],{"class":338},"checkout",[311,647,551],{"class":321},[311,649,329],{"class":321},[311,651,652],{"class":369},")                  ",[311,654,576],{"class":575},[311,656,658],{"class":313,"line":657},15,[311,659,349],{"emptyLinePlaceholder":348},[311,661,663,665,667,669,671,673,676,678,680,683,685,687,690],{"class":313,"line":662},16,[311,664,521],{"class":325},[311,666,524],{"class":321},[311,668,527],{"class":458},[311,670,462],{"class":369},[311,672,532],{"class":321},[311,674,675],{"class":369}," account",[311,677,299],{"class":321},[311,679,335],{"class":321},[311,681,682],{"class":338},"...",[311,684,551],{"class":321},[311,686,329],{"class":321},[311,688,689],{"class":369},")                      ",[311,691,692],{"class":575},"\u002F\u002F TS error\n",[311,694,696,698,700,702,704,706,709,711,713,715,717,719,721,723,725,727,729],{"class":313,"line":695},17,[311,697,521],{"class":325},[311,699,524],{"class":321},[311,701,527],{"class":458},[311,703,462],{"class":369},[311,705,532],{"class":321},[311,707,708],{"class":369}," usr",[311,710,299],{"class":321},[311,712,322],{"class":321},[311,714,377],{"class":369},[311,716,299],{"class":321},[311,718,335],{"class":321},[311,720,548],{"class":338},[311,722,551],{"class":321},[311,724,329],{"class":321},[311,726,329],{"class":321},[311,728,652],{"class":369},[311,730,692],{"class":575},[311,732,734],{"class":313,"line":733},18,[311,735,349],{"emptyLinePlaceholder":348},[311,737,739,742,744,747,749,753],{"class":313,"line":738},19,[311,740,741],{"class":317},"  return",[311,743,322],{"class":321},[311,745,746],{"class":369}," success",[311,748,299],{"class":321},[311,750,752],{"class":751},"sfNiH"," true",[311,754,395],{"class":321},[311,756,758,761],{"class":313,"line":757},20,[311,759,760],{"class":321},"}",[311,762,510],{"class":325},[269,764,765],{},"TypeScript catches typos and unknown fields at compile time, before they reach production.",[290,767,769],{"id":768},"internal-fields","Internal Fields",[269,771,772,773,776,777,780,781,784],{},"evlog sets some fields internally (",[273,774,775],{},"status",", ",[273,778,779],{},"service","). These are always accepted regardless of your type, through the ",[273,782,783],{},"InternalFields"," type:",[301,786,788],{"className":303,"code":787,"language":306,"meta":307,"style":307},"log.set({ status: 200 })    \u002F\u002F OK - internal field\nlog.set({ service: 'api' }) \u002F\u002F OK - internal field\n",[273,789,790,818],{"__ignoreMap":307},[311,791,792,795,797,799,801,803,806,808,811,813,815],{"class":313,"line":314},[311,793,794],{"class":325},"log",[311,796,524],{"class":321},[311,798,527],{"class":458},[311,800,462],{"class":325},[311,802,532],{"class":321},[311,804,805],{"class":369}," status",[311,807,299],{"class":321},[311,809,810],{"class":603}," 200",[311,812,329],{"class":321},[311,814,620],{"class":325},[311,816,817],{"class":575},"\u002F\u002F OK - internal field\n",[311,819,820,822,824,826,828,830,833,835,837,840,842,844,847],{"class":313,"line":345},[311,821,794],{"class":325},[311,823,524],{"class":321},[311,825,527],{"class":458},[311,827,462],{"class":325},[311,829,532],{"class":321},[311,831,832],{"class":369}," service",[311,834,299],{"class":321},[311,836,335],{"class":321},[311,838,839],{"class":338},"api",[311,841,551],{"class":321},[311,843,329],{"class":321},[311,845,846],{"class":325},") ",[311,848,817],{"class":575},[269,850,851,852,854,855,857],{},"You don't need to include ",[273,853,775],{}," or ",[273,856,779],{}," in your interface.",[290,859,861],{"id":860},"untyped-usage","Untyped Usage",[269,863,864,865,867],{},"Without a generic, ",[273,866,275],{}," accepts any fields as usual:",[301,869,871],{"className":303,"code":870,"language":306,"meta":307,"style":307},"const log = useLogger(event)\nlog.set({ anything: true, nested: { deep: 'value' } }) \u002F\u002F OK\n",[273,872,873,889],{"__ignoreMap":307},[311,874,875,878,881,884,886],{"class":313,"line":314},[311,876,877],{"class":355},"const",[311,879,880],{"class":325}," log ",[311,882,883],{"class":321},"=",[311,885,326],{"class":458},[311,887,888],{"class":325},"(event)\n",[311,890,891,893,895,897,899,901,904,906,908,910,913,915,917,920,922,924,927,929,931,933,935],{"class":313,"line":345},[311,892,794],{"class":325},[311,894,524],{"class":321},[311,896,527],{"class":458},[311,898,462],{"class":325},[311,900,532],{"class":321},[311,902,903],{"class":369}," anything",[311,905,299],{"class":321},[311,907,752],{"class":751},[311,909,554],{"class":321},[311,911,912],{"class":369}," nested",[311,914,299],{"class":321},[311,916,322],{"class":321},[311,918,919],{"class":369}," deep",[311,921,299],{"class":321},[311,923,335],{"class":321},[311,925,926],{"class":338},"value",[311,928,551],{"class":321},[311,930,329],{"class":321},[311,932,329],{"class":321},[311,934,846],{"class":325},[311,936,576],{"class":575},[269,938,939],{},"Typed fields are fully opt-in.",[290,941,943],{"id":942},"nuxt-auto-import","Nuxt Auto-Import",[945,946,949,950,953,954,958],"callout",{"color":947,"icon":948},"warning","i-lucide-triangle-alert","When using typed fields with ",[273,951,952],{},"useLogger\u003CT>",", you ",[955,956,957],"strong",{},"must"," use an explicit import. The Nuxt auto-import does not support excess property checking for generics due to a TypeScript limitation.",[301,960,962],{"className":303,"code":961,"language":306,"meta":307,"style":307},"\u002F\u002F Works - explicit import preserves type checking\nimport { useLogger } from 'evlog'\nconst log = useLogger\u003CMyFields>(event)\nlog.set({ typo: 'oops' }) \u002F\u002F TS error\n\n\u002F\u002F Does NOT work - auto-import loses excess property checking\nconst log = useLogger\u003CMyFields>(event)\nlog.set({ typo: 'oops' }) \u002F\u002F No error (silently accepted)\n",[273,963,964,969,987,1006,1036,1040,1045,1063],{"__ignoreMap":307},[311,965,966],{"class":313,"line":314},[311,967,968],{"class":575},"\u002F\u002F Works - explicit import preserves type checking\n",[311,970,971,973,975,977,979,981,983,985],{"class":313,"line":345},[311,972,318],{"class":317},[311,974,322],{"class":321},[311,976,326],{"class":325},[311,978,329],{"class":321},[311,980,332],{"class":317},[311,982,335],{"class":321},[311,984,339],{"class":338},[311,986,342],{"class":321},[311,988,989,991,993,995,997,999,1002,1004],{"class":313,"line":352},[311,990,877],{"class":355},[311,992,880],{"class":325},[311,994,883],{"class":321},[311,996,326],{"class":458},[311,998,497],{"class":321},[311,1000,1001],{"class":359},"MyFields",[311,1003,503],{"class":321},[311,1005,888],{"class":325},[311,1007,1008,1010,1012,1014,1016,1018,1021,1023,1025,1028,1030,1032,1034],{"class":313,"line":366},[311,1009,794],{"class":325},[311,1011,524],{"class":321},[311,1013,527],{"class":458},[311,1015,462],{"class":325},[311,1017,532],{"class":321},[311,1019,1020],{"class":369}," typo",[311,1022,299],{"class":321},[311,1024,335],{"class":321},[311,1026,1027],{"class":338},"oops",[311,1029,551],{"class":321},[311,1031,329],{"class":321},[311,1033,846],{"class":325},[311,1035,692],{"class":575},[311,1037,1038],{"class":313,"line":398},[311,1039,349],{"emptyLinePlaceholder":348},[311,1041,1042],{"class":313,"line":427},[311,1043,1044],{"class":575},"\u002F\u002F Does NOT work - auto-import loses excess property checking\n",[311,1046,1047,1049,1051,1053,1055,1057,1059,1061],{"class":313,"line":438},[311,1048,877],{"class":355},[311,1050,880],{"class":325},[311,1052,883],{"class":321},[311,1054,326],{"class":458},[311,1056,497],{"class":321},[311,1058,1001],{"class":359},[311,1060,503],{"class":321},[311,1062,888],{"class":325},[311,1064,1065,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089],{"class":313,"line":444},[311,1066,794],{"class":325},[311,1068,524],{"class":321},[311,1070,527],{"class":458},[311,1072,462],{"class":325},[311,1074,532],{"class":321},[311,1076,1020],{"class":369},[311,1078,299],{"class":321},[311,1080,335],{"class":321},[311,1082,1027],{"class":338},[311,1084,551],{"class":321},[311,1086,329],{"class":321},[311,1088,846],{"class":325},[311,1090,1091],{"class":575},"\u002F\u002F No error (silently accepted)\n",[269,1093,1094],{},"The auto-import works perfectly for untyped usage. Only add the explicit import when you need typed fields.",[290,1096,1098],{"id":1097},"outside-nuxt","Outside Nuxt",[269,1100,1101,1102,1105,1106,299],{},"The same generic works with ",[273,1103,1104],{},"createRequestLogger"," and ",[273,1107,1108],{},"createWorkersLogger",[1110,1111,1112,1304],"code-group",{},[301,1113,1115],{"className":303,"code":1114,"filename":101,"language":306,"meta":307,"style":307},"import { createRequestLogger } from 'evlog'\n\ninterface MyFields {\n  action: string\n  userId: string\n}\n\nconst log = createRequestLogger\u003CMyFields>({\n  method: 'POST',\n  path: '\u002Fcheckout',\n})\n\nlog.set({ action: 'checkout', userId: '123' }) \u002F\u002F OK\nlog.set({ unknown: true })                      \u002F\u002F TS error\n",[273,1116,1117,1136,1140,1149,1157,1166,1170,1174,1195,1212,1228,1234,1238,1279],{"__ignoreMap":307},[311,1118,1119,1121,1123,1126,1128,1130,1132,1134],{"class":313,"line":314},[311,1120,318],{"class":317},[311,1122,322],{"class":321},[311,1124,1125],{"class":325}," createRequestLogger",[311,1127,329],{"class":321},[311,1129,332],{"class":317},[311,1131,335],{"class":321},[311,1133,339],{"class":338},[311,1135,342],{"class":321},[311,1137,1138],{"class":313,"line":345},[311,1139,349],{"emptyLinePlaceholder":348},[311,1141,1142,1144,1147],{"class":313,"line":352},[311,1143,356],{"class":355},[311,1145,1146],{"class":359}," MyFields",[311,1148,363],{"class":321},[311,1150,1151,1153,1155],{"class":313,"line":366},[311,1152,430],{"class":369},[311,1154,299],{"class":321},[311,1156,435],{"class":359},[311,1158,1159,1162,1164],{"class":313,"line":398},[311,1160,1161],{"class":369},"  userId",[311,1163,299],{"class":321},[311,1165,435],{"class":359},[311,1167,1168],{"class":313,"line":427},[311,1169,441],{"class":321},[311,1171,1172],{"class":313,"line":438},[311,1173,349],{"emptyLinePlaceholder":348},[311,1175,1176,1178,1180,1182,1184,1186,1188,1190,1192],{"class":313,"line":444},[311,1177,877],{"class":355},[311,1179,880],{"class":325},[311,1181,883],{"class":321},[311,1183,1125],{"class":458},[311,1185,497],{"class":321},[311,1187,1001],{"class":359},[311,1189,503],{"class":321},[311,1191,462],{"class":325},[311,1193,1194],{"class":321},"{\n",[311,1196,1197,1200,1202,1204,1207,1209],{"class":313,"line":449},[311,1198,1199],{"class":369},"  method",[311,1201,299],{"class":321},[311,1203,335],{"class":321},[311,1205,1206],{"class":338},"POST",[311,1208,551],{"class":321},[311,1210,1211],{"class":321},",\n",[311,1213,1214,1217,1219,1221,1224,1226],{"class":313,"line":483},[311,1215,1216],{"class":369},"  path",[311,1218,299],{"class":321},[311,1220,335],{"class":321},[311,1222,1223],{"class":338},"\u002Fcheckout",[311,1225,551],{"class":321},[311,1227,1211],{"class":321},[311,1229,1230,1232],{"class":313,"line":513},[311,1231,760],{"class":321},[311,1233,510],{"class":325},[311,1235,1236],{"class":313,"line":518},[311,1237,349],{"emptyLinePlaceholder":348},[311,1239,1240,1242,1244,1246,1248,1250,1252,1254,1256,1258,1260,1262,1265,1267,1269,1271,1273,1275,1277],{"class":313,"line":579},[311,1241,794],{"class":325},[311,1243,524],{"class":321},[311,1245,527],{"class":458},[311,1247,462],{"class":325},[311,1249,532],{"class":321},[311,1251,638],{"class":369},[311,1253,299],{"class":321},[311,1255,335],{"class":321},[311,1257,645],{"class":338},[311,1259,551],{"class":321},[311,1261,554],{"class":321},[311,1263,1264],{"class":369}," userId",[311,1266,299],{"class":321},[311,1268,335],{"class":321},[311,1270,548],{"class":338},[311,1272,551],{"class":321},[311,1274,329],{"class":321},[311,1276,846],{"class":325},[311,1278,576],{"class":575},[311,1280,1281,1283,1285,1287,1289,1291,1294,1296,1298,1300,1302],{"class":313,"line":625},[311,1282,794],{"class":325},[311,1284,524],{"class":321},[311,1286,527],{"class":458},[311,1288,462],{"class":325},[311,1290,532],{"class":321},[311,1292,1293],{"class":369}," unknown",[311,1295,299],{"class":321},[311,1297,752],{"class":751},[311,1299,329],{"class":321},[311,1301,689],{"class":325},[311,1303,692],{"class":575},[301,1305,1307],{"className":303,"code":1306,"filename":96,"language":306,"meta":307,"style":307},"import { createWorkersLogger } from 'evlog\u002Fworkers'\n\ninterface MyFields {\n  action: string\n}\n\nconst log = createWorkersLogger\u003CMyFields>(request)\nlog.set({ action: 'process' }) \u002F\u002F OK\n",[273,1308,1309,1329,1333,1341,1349,1353,1357,1376],{"__ignoreMap":307},[311,1310,1311,1313,1315,1318,1320,1322,1324,1327],{"class":313,"line":314},[311,1312,318],{"class":317},[311,1314,322],{"class":321},[311,1316,1317],{"class":325}," createWorkersLogger",[311,1319,329],{"class":321},[311,1321,332],{"class":317},[311,1323,335],{"class":321},[311,1325,1326],{"class":338},"evlog\u002Fworkers",[311,1328,342],{"class":321},[311,1330,1331],{"class":313,"line":345},[311,1332,349],{"emptyLinePlaceholder":348},[311,1334,1335,1337,1339],{"class":313,"line":352},[311,1336,356],{"class":355},[311,1338,1146],{"class":359},[311,1340,363],{"class":321},[311,1342,1343,1345,1347],{"class":313,"line":366},[311,1344,430],{"class":369},[311,1346,299],{"class":321},[311,1348,435],{"class":359},[311,1350,1351],{"class":313,"line":398},[311,1352,441],{"class":321},[311,1354,1355],{"class":313,"line":427},[311,1356,349],{"emptyLinePlaceholder":348},[311,1358,1359,1361,1363,1365,1367,1369,1371,1373],{"class":313,"line":438},[311,1360,877],{"class":355},[311,1362,880],{"class":325},[311,1364,883],{"class":321},[311,1366,1317],{"class":458},[311,1368,497],{"class":321},[311,1370,1001],{"class":359},[311,1372,503],{"class":321},[311,1374,1375],{"class":325},"(request)\n",[311,1377,1378,1380,1382,1384,1386,1388,1390,1392,1394,1397,1399,1401,1403],{"class":313,"line":444},[311,1379,794],{"class":325},[311,1381,524],{"class":321},[311,1383,527],{"class":458},[311,1385,462],{"class":325},[311,1387,532],{"class":321},[311,1389,638],{"class":369},[311,1391,299],{"class":321},[311,1393,335],{"class":321},[311,1395,1396],{"class":338},"process",[311,1398,551],{"class":321},[311,1400,329],{"class":321},[311,1402,846],{"class":325},[311,1404,576],{"class":575},[290,1406,1408],{"id":1407},"design-tips","Design Tips",[1410,1411,1413],"h3",{"id":1412},"one-interface-per-domain","One Interface Per Domain",[269,1415,1416],{},"Define field interfaces per domain area, not per route:",[301,1418,1421],{"className":303,"code":1419,"filename":1420,"language":306,"meta":307,"style":307},"export interface AuthFields {\n  user: { id: string; email: string; role: string }\n  action: string\n  mfaUsed: boolean\n}\n\nexport interface PaymentFields {\n  user: { id: string; plan: string }\n  order: { id: string; total: number; currency: string }\n  payment: { method: string; last4: string }\n}\n","server\u002Ftypes\u002Flog-fields.ts",[273,1422,1423,1435,1469,1477,1487,1491,1495,1506,1530,1564,1591],{"__ignoreMap":307},[311,1424,1425,1427,1430,1433],{"class":313,"line":314},[311,1426,452],{"class":317},[311,1428,1429],{"class":355}," interface",[311,1431,1432],{"class":359}," AuthFields",[311,1434,363],{"class":321},[311,1436,1437,1439,1441,1443,1445,1447,1449,1451,1454,1456,1458,1460,1463,1465,1467],{"class":313,"line":345},[311,1438,370],{"class":369},[311,1440,299],{"class":321},[311,1442,322],{"class":321},[311,1444,377],{"class":369},[311,1446,299],{"class":321},[311,1448,382],{"class":359},[311,1450,385],{"class":321},[311,1452,1453],{"class":369}," email",[311,1455,299],{"class":321},[311,1457,382],{"class":359},[311,1459,385],{"class":321},[311,1461,1462],{"class":369}," role",[311,1464,299],{"class":321},[311,1466,382],{"class":359},[311,1468,395],{"class":321},[311,1470,1471,1473,1475],{"class":313,"line":352},[311,1472,430],{"class":369},[311,1474,299],{"class":321},[311,1476,435],{"class":359},[311,1478,1479,1482,1484],{"class":313,"line":366},[311,1480,1481],{"class":369},"  mfaUsed",[311,1483,299],{"class":321},[311,1485,1486],{"class":359}," boolean\n",[311,1488,1489],{"class":313,"line":398},[311,1490,441],{"class":321},[311,1492,1493],{"class":313,"line":427},[311,1494,349],{"emptyLinePlaceholder":348},[311,1496,1497,1499,1501,1504],{"class":313,"line":438},[311,1498,452],{"class":317},[311,1500,1429],{"class":355},[311,1502,1503],{"class":359}," PaymentFields",[311,1505,363],{"class":321},[311,1507,1508,1510,1512,1514,1516,1518,1520,1522,1524,1526,1528],{"class":313,"line":444},[311,1509,370],{"class":369},[311,1511,299],{"class":321},[311,1513,322],{"class":321},[311,1515,377],{"class":369},[311,1517,299],{"class":321},[311,1519,382],{"class":359},[311,1521,385],{"class":321},[311,1523,388],{"class":369},[311,1525,299],{"class":321},[311,1527,382],{"class":359},[311,1529,395],{"class":321},[311,1531,1532,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1558,1560,1562],{"class":313,"line":449},[311,1533,1534],{"class":369},"  order",[311,1536,299],{"class":321},[311,1538,322],{"class":321},[311,1540,377],{"class":369},[311,1542,299],{"class":321},[311,1544,382],{"class":359},[311,1546,385],{"class":321},[311,1548,418],{"class":369},[311,1550,299],{"class":321},[311,1552,413],{"class":359},[311,1554,385],{"class":321},[311,1556,1557],{"class":369}," currency",[311,1559,299],{"class":321},[311,1561,382],{"class":359},[311,1563,395],{"class":321},[311,1565,1566,1569,1571,1573,1576,1578,1580,1582,1585,1587,1589],{"class":313,"line":483},[311,1567,1568],{"class":369},"  payment",[311,1570,299],{"class":321},[311,1572,322],{"class":321},[311,1574,1575],{"class":369}," method",[311,1577,299],{"class":321},[311,1579,382],{"class":359},[311,1581,385],{"class":321},[311,1583,1584],{"class":369}," last4",[311,1586,299],{"class":321},[311,1588,382],{"class":359},[311,1590,395],{"class":321},[311,1592,1593],{"class":313,"line":513},[311,1594,441],{"class":321},[301,1596,1599],{"className":303,"code":1597,"filename":1598,"language":306,"meta":307,"style":307},"import { useLogger } from 'evlog'\nimport type { AuthFields } from '~\u002Fserver\u002Ftypes\u002Flog-fields'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger\u003CAuthFields>(event)\n  \u002F\u002F ...\n})\n","server\u002Fapi\u002Fauth\u002Flogin.post.ts",[273,1600,1601,1619,1641,1645,1667,1690,1695],{"__ignoreMap":307},[311,1602,1603,1605,1607,1609,1611,1613,1615,1617],{"class":313,"line":314},[311,1604,318],{"class":317},[311,1606,322],{"class":321},[311,1608,326],{"class":325},[311,1610,329],{"class":321},[311,1612,332],{"class":317},[311,1614,335],{"class":321},[311,1616,339],{"class":338},[311,1618,342],{"class":321},[311,1620,1621,1623,1626,1628,1630,1632,1634,1636,1639],{"class":313,"line":345},[311,1622,318],{"class":317},[311,1624,1625],{"class":317}," type",[311,1627,322],{"class":321},[311,1629,1432],{"class":325},[311,1631,329],{"class":321},[311,1633,332],{"class":317},[311,1635,335],{"class":321},[311,1637,1638],{"class":338},"~\u002Fserver\u002Ftypes\u002Flog-fields",[311,1640,342],{"class":321},[311,1642,1643],{"class":313,"line":352},[311,1644,349],{"emptyLinePlaceholder":348},[311,1646,1647,1649,1651,1653,1655,1657,1659,1661,1663,1665],{"class":313,"line":366},[311,1648,452],{"class":317},[311,1650,455],{"class":317},[311,1652,459],{"class":458},[311,1654,462],{"class":325},[311,1656,465],{"class":355},[311,1658,468],{"class":321},[311,1660,472],{"class":471},[311,1662,475],{"class":321},[311,1664,478],{"class":355},[311,1666,363],{"class":321},[311,1668,1669,1671,1673,1675,1677,1679,1682,1684,1686,1688],{"class":313,"line":398},[311,1670,486],{"class":355},[311,1672,489],{"class":325},[311,1674,492],{"class":321},[311,1676,326],{"class":458},[311,1678,497],{"class":321},[311,1680,1681],{"class":359},"AuthFields",[311,1683,503],{"class":321},[311,1685,462],{"class":369},[311,1687,472],{"class":325},[311,1689,510],{"class":369},[311,1691,1692],{"class":313,"line":427},[311,1693,1694],{"class":575},"  \u002F\u002F ...\n",[311,1696,1697,1699],{"class":313,"line":438},[311,1698,760],{"class":321},[311,1700,510],{"class":325},[1410,1702,1704],{"id":1703},"keep-interfaces-focused","Keep Interfaces Focused",[269,1706,1707],{},"Include only the fields your routes actually set. The interface doesn't need to mirror your entire data model:",[301,1709,1711],{"className":303,"code":1710,"language":306,"meta":307,"style":307},"\u002F\u002F Too broad - most routes won't set all these\ninterface EverythingFields {\n  user: FullUserProfile\n  order: CompleteOrder\n  payment: PaymentDetails\n  shipping: ShippingInfo\n}\n\n\u002F\u002F Focused - only what this route sets\ninterface CheckoutFields {\n  user: { id: string; plan: string }\n  cart: { items: number; total: number }\n}\n",[273,1712,1713,1718,1727,1736,1745,1754,1764,1768,1772,1777,1785,1809,1833],{"__ignoreMap":307},[311,1714,1715],{"class":313,"line":314},[311,1716,1717],{"class":575},"\u002F\u002F Too broad - most routes won't set all these\n",[311,1719,1720,1722,1725],{"class":313,"line":345},[311,1721,356],{"class":355},[311,1723,1724],{"class":359}," EverythingFields",[311,1726,363],{"class":321},[311,1728,1729,1731,1733],{"class":313,"line":352},[311,1730,370],{"class":369},[311,1732,299],{"class":321},[311,1734,1735],{"class":359}," FullUserProfile\n",[311,1737,1738,1740,1742],{"class":313,"line":366},[311,1739,1534],{"class":369},[311,1741,299],{"class":321},[311,1743,1744],{"class":359}," CompleteOrder\n",[311,1746,1747,1749,1751],{"class":313,"line":398},[311,1748,1568],{"class":369},[311,1750,299],{"class":321},[311,1752,1753],{"class":359}," PaymentDetails\n",[311,1755,1756,1759,1761],{"class":313,"line":427},[311,1757,1758],{"class":369},"  shipping",[311,1760,299],{"class":321},[311,1762,1763],{"class":359}," ShippingInfo\n",[311,1765,1766],{"class":313,"line":438},[311,1767,441],{"class":321},[311,1769,1770],{"class":313,"line":444},[311,1771,349],{"emptyLinePlaceholder":348},[311,1773,1774],{"class":313,"line":449},[311,1775,1776],{"class":575},"\u002F\u002F Focused - only what this route sets\n",[311,1778,1779,1781,1783],{"class":313,"line":483},[311,1780,356],{"class":355},[311,1782,360],{"class":359},[311,1784,363],{"class":321},[311,1786,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805,1807],{"class":313,"line":513},[311,1788,370],{"class":369},[311,1790,299],{"class":321},[311,1792,322],{"class":321},[311,1794,377],{"class":369},[311,1796,299],{"class":321},[311,1798,382],{"class":359},[311,1800,385],{"class":321},[311,1802,388],{"class":369},[311,1804,299],{"class":321},[311,1806,382],{"class":359},[311,1808,395],{"class":321},[311,1810,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831],{"class":313,"line":518},[311,1812,401],{"class":369},[311,1814,299],{"class":321},[311,1816,322],{"class":321},[311,1818,408],{"class":369},[311,1820,299],{"class":321},[311,1822,413],{"class":359},[311,1824,385],{"class":321},[311,1826,418],{"class":369},[311,1828,299],{"class":321},[311,1830,413],{"class":359},[311,1832,395],{"class":321},[311,1834,1835],{"class":313,"line":579},[311,1836,441],{"class":321},[1838,1839,1840],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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);}",{"title":307,"searchDepth":345,"depth":345,"links":1842},[1843,1844,1845,1846,1847,1848],{"id":292,"depth":345,"text":293},{"id":768,"depth":345,"text":769},{"id":860,"depth":345,"text":861},{"id":942,"depth":345,"text":943},{"id":1097,"depth":345,"text":1098},{"id":1407,"depth":345,"text":1408,"children":1849},[1850,1851],{"id":1412,"depth":352,"text":1413},{"id":1703,"depth":352,"text":1704},"Add compile-time type safety to your wide events with TypeScript module augmentation. Prevent typos and ensure consistent field names across your codebase.","md",[1855,1858],{"label":126,"icon":129,"to":127,"color":1856,"variant":1857},"neutral","subtle",{"label":146,"icon":149,"to":147,"color":1856,"variant":1857},{},{"icon":104},{"title":151,"description":1852},"6w9yu11YnY03lExfN8n0pNOuhvneKwxf6varbgkGXt4",[1864,1866],{"title":146,"path":147,"stem":148,"description":1865,"icon":149,"children":-1},"Security guidelines, data sanitization, and production tips for evlog. Learn what not to log and how to protect sensitive data.",{"title":155,"path":156,"stem":157,"description":1867,"icon":158,"children":-1},"Control log volume with two-tier sampling. Head sampling drops noise by level, tail sampling rescues critical events based on outcome. Never miss errors, slow requests, or critical paths.",1775236129579]