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