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