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