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