[{"data":1,"prerenderedAt":2904},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-best-practices":392,"-core-concepts-best-practices-surround":2899},[4,35,159,201,289,376],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"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",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Adapters","\u002Fadapters","6.adapters",[294,297,337,352],{"title":41,"path":295,"stem":296,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":298,"path":299,"stem":300,"children":301,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[302,307,312,317,322,327,332],{"title":303,"path":304,"stem":305,"icon":306},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":308,"path":309,"stem":310,"icon":311},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":313,"path":314,"stem":315,"icon":316},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":318,"path":319,"stem":320,"icon":321},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":323,"path":324,"stem":325,"icon":326},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":328,"path":329,"stem":330,"icon":331},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":333,"path":334,"stem":335,"icon":336},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":338,"path":339,"stem":340,"children":341,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[342,347],{"title":343,"path":344,"stem":345,"icon":346},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":348,"path":349,"stem":350,"icon":351},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":353,"path":354,"stem":355,"children":356,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[357,362,367,371],{"title":358,"path":359,"stem":360,"icon":361},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":363,"path":364,"stem":365,"icon":366},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":368,"path":369,"stem":370,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":372,"path":373,"stem":374,"icon":375},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":377,"path":378,"stem":379,"children":380,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[381,384,388],{"title":41,"path":382,"stem":383,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":385,"path":386,"stem":387,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":389,"path":390,"stem":391,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":393,"title":185,"body":394,"description":2888,"extension":2889,"links":2890,"meta":2895,"navigation":2896,"path":186,"seo":2897,"stem":187,"__hash__":2898},"docs\u002F3.core-concepts\u002F4.best-practices.md",{"type":395,"value":396,"toc":2869},"minimark",[397,401,406,413,491,496,499,502,550,565,573,577,582,585,829,833,836,1444,1447,1656,1660,1663,2168,2173,2177,2180,2184,2223,2227,2277,2281,2306,2310,2313,2497,2501,2616,2620,2623,2832,2844,2848,2865],[398,399,400],"p",{},"This guide covers security best practices and production considerations for evlog.",[402,403,405],"h2",{"id":404},"what-not-to-log","What NOT to Log",[398,407,408,409],{},"Wide events are powerful because they capture comprehensive context. However, this makes it easy to accidentally log sensitive data. ",[410,411,412],"strong",{},"Never log:",[414,415,416,432],"table",{},[417,418,419],"thead",{},[420,421,422,426,429],"tr",{},[423,424,425],"th",{},"Category",[423,427,428],{},"Examples",[423,430,431],{},"Risk",[433,434,435,447,458,469,480],"tbody",{},[420,436,437,441,444],{},[438,439,440],"td",{},"Credentials",[438,442,443],{},"Passwords, API keys, tokens, secrets",[438,445,446],{},"Account compromise",[420,448,449,452,455],{},[438,450,451],{},"Payment data",[438,453,454],{},"Full card numbers, CVV, bank accounts",[438,456,457],{},"PCI compliance violation",[420,459,460,463,466],{},[438,461,462],{},"Personal data (PII)",[438,464,465],{},"SSN, passport numbers, driver's license",[438,467,468],{},"Privacy laws (GDPR, CCPA)",[420,470,471,474,477],{},[438,472,473],{},"Health data",[438,475,476],{},"Medical records, diagnoses",[438,478,479],{},"HIPAA violation",[420,481,482,485,488],{},[438,483,484],{},"Authentication",[438,486,487],{},"Session tokens, JWTs, refresh tokens",[438,489,490],{},"Session hijacking",[492,493,495],"callout",{"color":494,"icon":59},"error","Logs are often accessible to your entire team and may be stored in third-party services. Treat them as semi-public.",[402,497,197],{"id":498},"auto-redaction",[398,500,501],{},"The simplest way to protect PII is to enable built-in auto-redaction:",[503,504,510],"pre",{"className":505,"code":506,"filename":507,"language":508,"meta":509,"style":509},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","evlog: {\n  redact: true,\n}\n","nuxt.config.ts","typescript","",[511,512,513,529,544],"code",{"__ignoreMap":509},[514,515,518,522,526],"span",{"class":516,"line":517},"line",1,[514,519,521],{"class":520},"sBMFI","evlog",[514,523,525],{"class":524},"sMK4o",":",[514,527,528],{"class":524}," {\n",[514,530,532,535,537,541],{"class":516,"line":531},2,[514,533,534],{"class":520},"  redact",[514,536,525],{"class":524},[514,538,540],{"class":539},"sfNiH"," true",[514,542,543],{"class":524},",\n",[514,545,547],{"class":516,"line":546},3,[514,548,549],{"class":524},"}\n",[398,551,552,553,556,557,560,561,564],{},"This automatically masks credit cards (",[511,554,555],{},"****1111","), emails (",[511,558,559],{},"a***@***.com","), IPs, phone numbers, JWTs, Bearer tokens, and IBANs in all wide events — before console output and before any drain. See ",[562,563,197],"a",{"href":198}," for the full configuration reference.",[492,566,568,569,572],{"color":567,"icon":129},"success","Auto-redaction is a safety net, not a replacement for careful logging. Always prefer explicit field selection and combine with ",[511,570,571],{},"redact: true"," for defense in depth.",[402,574,576],{"id":575},"sanitization-patterns","Sanitization Patterns",[578,579,581],"h3",{"id":580},"manual-field-selection","Manual Field Selection",[398,583,584],{},"The safest approach is to explicitly select which fields to log:",[503,586,589],{"className":505,"code":587,"filename":588,"language":508,"meta":509,"style":509},"import { useLogger } from 'evlog'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const body = await readBody(event)\n\n  \u002F\u002F ❌ NEVER log the entire request body\n  \u002F\u002F log.set({ body })\n\n  \u002F\u002F ✅ Explicitly select safe fields\n  log.set({\n    user: {\n      id: body.id,\n      email: maskEmail(body.email),\n      \u002F\u002F password: body.password ← NEVER include\n    },\n  })\n})\n","server\u002Fapi\u002Fuser\u002Fupdate.post.ts",[511,590,591,619,625,659,681,703,708,715,721,726,732,749,759,776,801,807,813,821],{"__ignoreMap":509},[514,592,593,597,600,604,607,610,613,616],{"class":516,"line":517},[514,594,596],{"class":595},"s7zQu","import",[514,598,599],{"class":524}," {",[514,601,603],{"class":602},"sTEyZ"," useLogger",[514,605,606],{"class":524}," }",[514,608,609],{"class":595}," from",[514,611,612],{"class":524}," '",[514,614,521],{"class":615},"sfazB",[514,617,618],{"class":524},"'\n",[514,620,621],{"class":516,"line":531},[514,622,624],{"emptyLinePlaceholder":623},true,"\n",[514,626,627,630,633,637,640,644,647,651,654,657],{"class":516,"line":546},[514,628,629],{"class":595},"export",[514,631,632],{"class":595}," default",[514,634,636],{"class":635},"s2Zo4"," defineEventHandler",[514,638,639],{"class":602},"(",[514,641,643],{"class":642},"spNyl","async",[514,645,646],{"class":524}," (",[514,648,650],{"class":649},"sHdIc","event",[514,652,653],{"class":524},")",[514,655,656],{"class":642}," =>",[514,658,528],{"class":524},[514,660,662,665,668,671,673,676,678],{"class":516,"line":661},4,[514,663,664],{"class":642},"  const",[514,666,667],{"class":602}," log",[514,669,670],{"class":524}," =",[514,672,603],{"class":635},[514,674,639],{"class":675},"swJcz",[514,677,650],{"class":602},[514,679,680],{"class":675},")\n",[514,682,684,686,689,691,694,697,699,701],{"class":516,"line":683},5,[514,685,664],{"class":642},[514,687,688],{"class":602}," body",[514,690,670],{"class":524},[514,692,693],{"class":595}," await",[514,695,696],{"class":635}," readBody",[514,698,639],{"class":675},[514,700,650],{"class":602},[514,702,680],{"class":675},[514,704,706],{"class":516,"line":705},6,[514,707,624],{"emptyLinePlaceholder":623},[514,709,711],{"class":516,"line":710},7,[514,712,714],{"class":713},"sHwdD","  \u002F\u002F ❌ NEVER log the entire request body\n",[514,716,718],{"class":516,"line":717},8,[514,719,720],{"class":713},"  \u002F\u002F log.set({ body })\n",[514,722,724],{"class":516,"line":723},9,[514,725,624],{"emptyLinePlaceholder":623},[514,727,729],{"class":516,"line":728},10,[514,730,731],{"class":713},"  \u002F\u002F ✅ Explicitly select safe fields\n",[514,733,735,738,741,744,746],{"class":516,"line":734},11,[514,736,737],{"class":602},"  log",[514,739,740],{"class":524},".",[514,742,743],{"class":635},"set",[514,745,639],{"class":675},[514,747,748],{"class":524},"{\n",[514,750,752,755,757],{"class":516,"line":751},12,[514,753,754],{"class":675},"    user",[514,756,525],{"class":524},[514,758,528],{"class":524},[514,760,762,765,767,769,771,774],{"class":516,"line":761},13,[514,763,764],{"class":675},"      id",[514,766,525],{"class":524},[514,768,688],{"class":602},[514,770,740],{"class":524},[514,772,773],{"class":602},"id",[514,775,543],{"class":524},[514,777,779,782,784,787,789,792,794,797,799],{"class":516,"line":778},14,[514,780,781],{"class":675},"      email",[514,783,525],{"class":524},[514,785,786],{"class":635}," maskEmail",[514,788,639],{"class":675},[514,790,791],{"class":602},"body",[514,793,740],{"class":524},[514,795,796],{"class":602},"email",[514,798,653],{"class":675},[514,800,543],{"class":524},[514,802,804],{"class":516,"line":803},15,[514,805,806],{"class":713},"      \u002F\u002F password: body.password ← NEVER include\n",[514,808,810],{"class":516,"line":809},16,[514,811,812],{"class":524},"    },\n",[514,814,816,819],{"class":516,"line":815},17,[514,817,818],{"class":524},"  }",[514,820,680],{"class":675},[514,822,824,827],{"class":516,"line":823},18,[514,825,826],{"class":524},"}",[514,828,680],{"class":602},[578,830,832],{"id":831},"helper-functions","Helper Functions",[398,834,835],{},"Create utility functions to sanitize common data types:",[503,837,840],{"className":505,"code":838,"filename":839,"language":508,"meta":509,"style":509},"\u002F** Masks email: john.doe@example.com → j***.d**@e***.com *\u002F\nexport function maskEmail(email: string): string {\n  const [local, domain] = email.split('@')\n  if (!domain) return '***'\n  const [domainName, tld] = domain.split('.')\n  return `${local[0]}***@${domainName[0]}***.${tld}`\n}\n\n\u002F** Masks card number: 4242424242424242 → ****4242 *\u002F\nexport function maskCard(card: string): string {\n  return `****${card.slice(-4)}`\n}\n\n\u002F** Truncates long IDs for readability *\u002F\nexport function truncateId(id: string, length = 8): string {\n  if (id.length \u003C= length) return id\n  return `${id.slice(0, length)}...`\n}\n\n\u002F** Removes sensitive fields from an object *\u002F\nexport function sanitize\u003CT extends Record\u003Cstring, unknown>>(\n  obj: T,\n  sensitiveKeys: string[] = ['password', 'token', 'secret', 'apiKey', 'authorization']\n): Partial\u003CT> {\n  const result = { ...obj }\n  for (const key of sensitiveKeys) {\n    if (key in result) {\n      delete result[key]\n    }\n  }\n  return result\n}\n","server\u002Futils\u002Fsanitize.ts",[511,841,842,857,882,922,948,982,1027,1031,1035,1040,1064,1095,1099,1103,1108,1141,1166,1195,1199,1204,1210,1245,1258,1322,1339,1360,1384,1404,1419,1425,1431,1439],{"__ignoreMap":509},[514,843,844,847,850,854],{"class":516,"line":517},[514,845,846],{"class":713},"\u002F** Masks email: john.doe",[514,848,849],{"class":595},"@",[514,851,853],{"class":852},"s6hCs","example",[514,855,856],{"class":713},".com → j***.d**@e***.com *\u002F\n",[514,858,859,861,864,866,868,870,872,875,878,880],{"class":516,"line":531},[514,860,629],{"class":595},[514,862,863],{"class":642}," function",[514,865,786],{"class":635},[514,867,639],{"class":524},[514,869,796],{"class":649},[514,871,525],{"class":524},[514,873,874],{"class":520}," string",[514,876,877],{"class":524},"):",[514,879,874],{"class":520},[514,881,528],{"class":524},[514,883,884,886,889,892,895,898,901,903,906,908,911,913,916,918,920],{"class":516,"line":546},[514,885,664],{"class":642},[514,887,888],{"class":524}," [",[514,890,891],{"class":602},"local",[514,893,894],{"class":524},",",[514,896,897],{"class":602}," domain",[514,899,900],{"class":524},"]",[514,902,670],{"class":524},[514,904,905],{"class":602}," email",[514,907,740],{"class":524},[514,909,910],{"class":635},"split",[514,912,639],{"class":675},[514,914,915],{"class":524},"'",[514,917,849],{"class":615},[514,919,915],{"class":524},[514,921,680],{"class":675},[514,923,924,927,929,932,935,938,941,943,946],{"class":516,"line":661},[514,925,926],{"class":595},"  if",[514,928,646],{"class":675},[514,930,931],{"class":524},"!",[514,933,934],{"class":602},"domain",[514,936,937],{"class":675},") ",[514,939,940],{"class":595},"return",[514,942,612],{"class":524},[514,944,945],{"class":615},"***",[514,947,618],{"class":524},[514,949,950,952,954,957,959,962,964,966,968,970,972,974,976,978,980],{"class":516,"line":683},[514,951,664],{"class":642},[514,953,888],{"class":524},[514,955,956],{"class":602},"domainName",[514,958,894],{"class":524},[514,960,961],{"class":602}," tld",[514,963,900],{"class":524},[514,965,670],{"class":524},[514,967,897],{"class":602},[514,969,740],{"class":524},[514,971,910],{"class":635},[514,973,639],{"class":675},[514,975,915],{"class":524},[514,977,740],{"class":615},[514,979,915],{"class":524},[514,981,680],{"class":675},[514,983,984,987,990,993,997,999,1001,1004,1007,1010,1012,1014,1016,1019,1021,1024],{"class":516,"line":705},[514,985,986],{"class":595},"  return",[514,988,989],{"class":524}," `${",[514,991,992],{"class":602},"local[",[514,994,996],{"class":995},"sbssI","0",[514,998,900],{"class":602},[514,1000,826],{"class":524},[514,1002,1003],{"class":615},"***@",[514,1005,1006],{"class":524},"${",[514,1008,1009],{"class":602},"domainName[",[514,1011,996],{"class":995},[514,1013,900],{"class":602},[514,1015,826],{"class":524},[514,1017,1018],{"class":615},"***.",[514,1020,1006],{"class":524},[514,1022,1023],{"class":602},"tld",[514,1025,1026],{"class":524},"}`\n",[514,1028,1029],{"class":516,"line":710},[514,1030,549],{"class":524},[514,1032,1033],{"class":516,"line":717},[514,1034,624],{"emptyLinePlaceholder":623},[514,1036,1037],{"class":516,"line":723},[514,1038,1039],{"class":713},"\u002F** Masks card number: 4242424242424242 → ****4242 *\u002F\n",[514,1041,1042,1044,1046,1049,1051,1054,1056,1058,1060,1062],{"class":516,"line":728},[514,1043,629],{"class":595},[514,1045,863],{"class":642},[514,1047,1048],{"class":635}," maskCard",[514,1050,639],{"class":524},[514,1052,1053],{"class":649},"card",[514,1055,525],{"class":524},[514,1057,874],{"class":520},[514,1059,877],{"class":524},[514,1061,874],{"class":520},[514,1063,528],{"class":524},[514,1065,1066,1068,1071,1074,1076,1078,1080,1083,1085,1088,1091,1093],{"class":516,"line":734},[514,1067,986],{"class":595},[514,1069,1070],{"class":524}," `",[514,1072,1073],{"class":615},"****",[514,1075,1006],{"class":524},[514,1077,1053],{"class":602},[514,1079,740],{"class":524},[514,1081,1082],{"class":635},"slice",[514,1084,639],{"class":602},[514,1086,1087],{"class":524},"-",[514,1089,1090],{"class":995},"4",[514,1092,653],{"class":602},[514,1094,1026],{"class":524},[514,1096,1097],{"class":516,"line":751},[514,1098,549],{"class":524},[514,1100,1101],{"class":516,"line":761},[514,1102,624],{"emptyLinePlaceholder":623},[514,1104,1105],{"class":516,"line":778},[514,1106,1107],{"class":713},"\u002F** Truncates long IDs for readability *\u002F\n",[514,1109,1110,1112,1114,1117,1119,1121,1123,1125,1127,1130,1132,1135,1137,1139],{"class":516,"line":803},[514,1111,629],{"class":595},[514,1113,863],{"class":642},[514,1115,1116],{"class":635}," truncateId",[514,1118,639],{"class":524},[514,1120,773],{"class":649},[514,1122,525],{"class":524},[514,1124,874],{"class":520},[514,1126,894],{"class":524},[514,1128,1129],{"class":649}," length",[514,1131,670],{"class":524},[514,1133,1134],{"class":995}," 8",[514,1136,877],{"class":524},[514,1138,874],{"class":520},[514,1140,528],{"class":524},[514,1142,1143,1145,1147,1149,1151,1154,1157,1159,1161,1163],{"class":516,"line":809},[514,1144,926],{"class":595},[514,1146,646],{"class":675},[514,1148,773],{"class":602},[514,1150,740],{"class":524},[514,1152,1153],{"class":602},"length",[514,1155,1156],{"class":524}," \u003C=",[514,1158,1129],{"class":602},[514,1160,937],{"class":675},[514,1162,940],{"class":595},[514,1164,1165],{"class":602}," id\n",[514,1167,1168,1170,1172,1174,1176,1178,1180,1182,1184,1187,1189,1192],{"class":516,"line":815},[514,1169,986],{"class":595},[514,1171,989],{"class":524},[514,1173,773],{"class":602},[514,1175,740],{"class":524},[514,1177,1082],{"class":635},[514,1179,639],{"class":602},[514,1181,996],{"class":995},[514,1183,894],{"class":524},[514,1185,1186],{"class":602}," length)",[514,1188,826],{"class":524},[514,1190,1191],{"class":615},"...",[514,1193,1194],{"class":524},"`\n",[514,1196,1197],{"class":516,"line":823},[514,1198,549],{"class":524},[514,1200,1202],{"class":516,"line":1201},19,[514,1203,624],{"emptyLinePlaceholder":623},[514,1205,1207],{"class":516,"line":1206},20,[514,1208,1209],{"class":713},"\u002F** Removes sensitive fields from an object *\u002F\n",[514,1211,1213,1215,1217,1220,1223,1226,1229,1232,1234,1237,1239,1242],{"class":516,"line":1212},21,[514,1214,629],{"class":595},[514,1216,863],{"class":642},[514,1218,1219],{"class":635}," sanitize",[514,1221,1222],{"class":524},"\u003C",[514,1224,1225],{"class":520},"T",[514,1227,1228],{"class":642}," extends",[514,1230,1231],{"class":520}," Record",[514,1233,1222],{"class":524},[514,1235,1236],{"class":520},"string",[514,1238,894],{"class":524},[514,1240,1241],{"class":520}," unknown",[514,1243,1244],{"class":524},">>(\n",[514,1246,1248,1251,1253,1256],{"class":516,"line":1247},22,[514,1249,1250],{"class":649},"  obj",[514,1252,525],{"class":524},[514,1254,1255],{"class":520}," T",[514,1257,543],{"class":524},[514,1259,1261,1264,1266,1268,1271,1274,1276,1278,1281,1283,1285,1287,1290,1292,1294,1296,1299,1301,1303,1305,1308,1310,1312,1314,1317,1319],{"class":516,"line":1260},23,[514,1262,1263],{"class":649},"  sensitiveKeys",[514,1265,525],{"class":524},[514,1267,874],{"class":520},[514,1269,1270],{"class":602},"[] ",[514,1272,1273],{"class":524},"=",[514,1275,888],{"class":602},[514,1277,915],{"class":524},[514,1279,1280],{"class":615},"password",[514,1282,915],{"class":524},[514,1284,894],{"class":524},[514,1286,612],{"class":524},[514,1288,1289],{"class":615},"token",[514,1291,915],{"class":524},[514,1293,894],{"class":524},[514,1295,612],{"class":524},[514,1297,1298],{"class":615},"secret",[514,1300,915],{"class":524},[514,1302,894],{"class":524},[514,1304,612],{"class":524},[514,1306,1307],{"class":615},"apiKey",[514,1309,915],{"class":524},[514,1311,894],{"class":524},[514,1313,612],{"class":524},[514,1315,1316],{"class":615},"authorization",[514,1318,915],{"class":524},[514,1320,1321],{"class":602},"]\n",[514,1323,1325,1327,1330,1332,1334,1337],{"class":516,"line":1324},24,[514,1326,877],{"class":524},[514,1328,1329],{"class":520}," Partial",[514,1331,1222],{"class":524},[514,1333,1225],{"class":520},[514,1335,1336],{"class":524},">",[514,1338,528],{"class":524},[514,1340,1342,1344,1347,1349,1351,1354,1357],{"class":516,"line":1341},25,[514,1343,664],{"class":642},[514,1345,1346],{"class":602}," result",[514,1348,670],{"class":524},[514,1350,599],{"class":524},[514,1352,1353],{"class":524}," ...",[514,1355,1356],{"class":602},"obj",[514,1358,1359],{"class":524}," }\n",[514,1361,1363,1366,1368,1371,1374,1377,1380,1382],{"class":516,"line":1362},26,[514,1364,1365],{"class":595},"  for",[514,1367,646],{"class":675},[514,1369,1370],{"class":642},"const",[514,1372,1373],{"class":602}," key",[514,1375,1376],{"class":524}," of",[514,1378,1379],{"class":602}," sensitiveKeys",[514,1381,937],{"class":675},[514,1383,748],{"class":524},[514,1385,1387,1390,1392,1395,1398,1400,1402],{"class":516,"line":1386},27,[514,1388,1389],{"class":595},"    if",[514,1391,646],{"class":675},[514,1393,1394],{"class":602},"key",[514,1396,1397],{"class":524}," in",[514,1399,1346],{"class":602},[514,1401,937],{"class":675},[514,1403,748],{"class":524},[514,1405,1407,1410,1412,1415,1417],{"class":516,"line":1406},28,[514,1408,1409],{"class":524},"      delete",[514,1411,1346],{"class":602},[514,1413,1414],{"class":675},"[",[514,1416,1394],{"class":602},[514,1418,1321],{"class":675},[514,1420,1422],{"class":516,"line":1421},29,[514,1423,1424],{"class":524},"    }\n",[514,1426,1428],{"class":516,"line":1427},30,[514,1429,1430],{"class":524},"  }\n",[514,1432,1434,1436],{"class":516,"line":1433},31,[514,1435,986],{"class":595},[514,1437,1438],{"class":602}," result\n",[514,1440,1442],{"class":516,"line":1441},32,[514,1443,549],{"class":524},[398,1445,1446],{},"Usage:",[503,1448,1451],{"className":505,"code":1449,"filename":1450,"language":508,"meta":509,"style":509},"import { useLogger } from 'evlog'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const { user, card } = await readBody(event)\n\n  log.set({\n    user: {\n      id: user.id,\n      email: maskEmail(user.email),\n    },\n    payment: {\n      last4: maskCard(card.number),\n      \u002F\u002F ❌ Never: number, cvv, expiry\n    },\n  })\n})\n","server\u002Fapi\u002Fcheckout.post.ts",[511,1452,1453,1471,1475,1497,1513,1541,1545,1557,1565,1579,1600,1604,1613,1635,1640,1644,1650],{"__ignoreMap":509},[514,1454,1455,1457,1459,1461,1463,1465,1467,1469],{"class":516,"line":517},[514,1456,596],{"class":595},[514,1458,599],{"class":524},[514,1460,603],{"class":602},[514,1462,606],{"class":524},[514,1464,609],{"class":595},[514,1466,612],{"class":524},[514,1468,521],{"class":615},[514,1470,618],{"class":524},[514,1472,1473],{"class":516,"line":531},[514,1474,624],{"emptyLinePlaceholder":623},[514,1476,1477,1479,1481,1483,1485,1487,1489,1491,1493,1495],{"class":516,"line":546},[514,1478,629],{"class":595},[514,1480,632],{"class":595},[514,1482,636],{"class":635},[514,1484,639],{"class":602},[514,1486,643],{"class":642},[514,1488,646],{"class":524},[514,1490,650],{"class":649},[514,1492,653],{"class":524},[514,1494,656],{"class":642},[514,1496,528],{"class":524},[514,1498,1499,1501,1503,1505,1507,1509,1511],{"class":516,"line":661},[514,1500,664],{"class":642},[514,1502,667],{"class":602},[514,1504,670],{"class":524},[514,1506,603],{"class":635},[514,1508,639],{"class":675},[514,1510,650],{"class":602},[514,1512,680],{"class":675},[514,1514,1515,1517,1519,1522,1524,1527,1529,1531,1533,1535,1537,1539],{"class":516,"line":683},[514,1516,664],{"class":642},[514,1518,599],{"class":524},[514,1520,1521],{"class":602}," user",[514,1523,894],{"class":524},[514,1525,1526],{"class":602}," card",[514,1528,606],{"class":524},[514,1530,670],{"class":524},[514,1532,693],{"class":595},[514,1534,696],{"class":635},[514,1536,639],{"class":675},[514,1538,650],{"class":602},[514,1540,680],{"class":675},[514,1542,1543],{"class":516,"line":705},[514,1544,624],{"emptyLinePlaceholder":623},[514,1546,1547,1549,1551,1553,1555],{"class":516,"line":710},[514,1548,737],{"class":602},[514,1550,740],{"class":524},[514,1552,743],{"class":635},[514,1554,639],{"class":675},[514,1556,748],{"class":524},[514,1558,1559,1561,1563],{"class":516,"line":717},[514,1560,754],{"class":675},[514,1562,525],{"class":524},[514,1564,528],{"class":524},[514,1566,1567,1569,1571,1573,1575,1577],{"class":516,"line":723},[514,1568,764],{"class":675},[514,1570,525],{"class":524},[514,1572,1521],{"class":602},[514,1574,740],{"class":524},[514,1576,773],{"class":602},[514,1578,543],{"class":524},[514,1580,1581,1583,1585,1587,1589,1592,1594,1596,1598],{"class":516,"line":728},[514,1582,781],{"class":675},[514,1584,525],{"class":524},[514,1586,786],{"class":635},[514,1588,639],{"class":675},[514,1590,1591],{"class":602},"user",[514,1593,740],{"class":524},[514,1595,796],{"class":602},[514,1597,653],{"class":675},[514,1599,543],{"class":524},[514,1601,1602],{"class":516,"line":734},[514,1603,812],{"class":524},[514,1605,1606,1609,1611],{"class":516,"line":751},[514,1607,1608],{"class":675},"    payment",[514,1610,525],{"class":524},[514,1612,528],{"class":524},[514,1614,1615,1618,1620,1622,1624,1626,1628,1631,1633],{"class":516,"line":761},[514,1616,1617],{"class":675},"      last4",[514,1619,525],{"class":524},[514,1621,1048],{"class":635},[514,1623,639],{"class":675},[514,1625,1053],{"class":602},[514,1627,740],{"class":524},[514,1629,1630],{"class":602},"number",[514,1632,653],{"class":675},[514,1634,543],{"class":524},[514,1636,1637],{"class":516,"line":778},[514,1638,1639],{"class":713},"      \u002F\u002F ❌ Never: number, cvv, expiry\n",[514,1641,1642],{"class":516,"line":803},[514,1643,812],{"class":524},[514,1645,1646,1648],{"class":516,"line":809},[514,1647,818],{"class":524},[514,1649,680],{"class":675},[514,1651,1652,1654],{"class":516,"line":815},[514,1653,826],{"class":524},[514,1655,680],{"class":602},[578,1657,1659],{"id":1658},"drain-hook-filtering","Drain Hook Filtering",[398,1661,1662],{},"As a last line of defense, filter sensitive data before sending to external services:",[503,1664,1667],{"className":505,"code":1665,"filename":1666,"language":508,"meta":509,"style":509},"const SENSITIVE_KEYS = ['password', 'token', 'secret', 'apiKey', 'authorization', 'cookie']\n\nfunction deepSanitize(obj: Record\u003Cstring, unknown>): Record\u003Cstring, unknown> {\n  const result: Record\u003Cstring, unknown> = {}\n\n  for (const [key, value] of Object.entries(obj)) {\n    \u002F\u002F Check if key contains any sensitive keyword (case-insensitive)\n    if (SENSITIVE_KEYS.some(k => key.toLowerCase().includes(k))) {\n      result[key] = '[REDACTED]'\n    } else if (value && typeof value === 'object' && !Array.isArray(value)) {\n      \u002F\u002F Recursively sanitize nested objects\n      result[key] = deepSanitize(value as Record\u003Cstring, unknown>)\n    } else {\n      result[key] = value\n    }\n  }\n\n  return result\n}\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', (ctx) => {\n    \u002F\u002F Sanitize before sending to external service\n    ctx.event = deepSanitize(ctx.event) as typeof ctx.event\n  })\n})\n","server\u002Fplugins\u002Fevlog-sanitize.ts",[511,1668,1669,1729,1733,1774,1799,1803,1841,1846,1891,1912,1967,1972,2007,2015,2030,2034,2038,2042,2048,2052,2056,2078,2115,2120,2156,2162],{"__ignoreMap":509},[514,1670,1671,1673,1676,1678,1680,1682,1684,1686,1688,1690,1692,1694,1696,1698,1700,1702,1704,1706,1708,1710,1712,1714,1716,1718,1720,1722,1725,1727],{"class":516,"line":517},[514,1672,1370],{"class":642},[514,1674,1675],{"class":602}," SENSITIVE_KEYS ",[514,1677,1273],{"class":524},[514,1679,888],{"class":602},[514,1681,915],{"class":524},[514,1683,1280],{"class":615},[514,1685,915],{"class":524},[514,1687,894],{"class":524},[514,1689,612],{"class":524},[514,1691,1289],{"class":615},[514,1693,915],{"class":524},[514,1695,894],{"class":524},[514,1697,612],{"class":524},[514,1699,1298],{"class":615},[514,1701,915],{"class":524},[514,1703,894],{"class":524},[514,1705,612],{"class":524},[514,1707,1307],{"class":615},[514,1709,915],{"class":524},[514,1711,894],{"class":524},[514,1713,612],{"class":524},[514,1715,1316],{"class":615},[514,1717,915],{"class":524},[514,1719,894],{"class":524},[514,1721,612],{"class":524},[514,1723,1724],{"class":615},"cookie",[514,1726,915],{"class":524},[514,1728,1321],{"class":602},[514,1730,1731],{"class":516,"line":531},[514,1732,624],{"emptyLinePlaceholder":623},[514,1734,1735,1738,1741,1743,1745,1747,1749,1751,1753,1755,1757,1760,1762,1764,1766,1768,1770,1772],{"class":516,"line":546},[514,1736,1737],{"class":642},"function",[514,1739,1740],{"class":635}," deepSanitize",[514,1742,639],{"class":524},[514,1744,1356],{"class":649},[514,1746,525],{"class":524},[514,1748,1231],{"class":520},[514,1750,1222],{"class":524},[514,1752,1236],{"class":520},[514,1754,894],{"class":524},[514,1756,1241],{"class":520},[514,1758,1759],{"class":524},">):",[514,1761,1231],{"class":520},[514,1763,1222],{"class":524},[514,1765,1236],{"class":520},[514,1767,894],{"class":524},[514,1769,1241],{"class":520},[514,1771,1336],{"class":524},[514,1773,528],{"class":524},[514,1775,1776,1778,1780,1782,1784,1786,1788,1790,1792,1794,1796],{"class":516,"line":661},[514,1777,664],{"class":642},[514,1779,1346],{"class":602},[514,1781,525],{"class":524},[514,1783,1231],{"class":520},[514,1785,1222],{"class":524},[514,1787,1236],{"class":520},[514,1789,894],{"class":524},[514,1791,1241],{"class":520},[514,1793,1336],{"class":524},[514,1795,670],{"class":524},[514,1797,1798],{"class":524}," {}\n",[514,1800,1801],{"class":516,"line":683},[514,1802,624],{"emptyLinePlaceholder":623},[514,1804,1805,1807,1809,1811,1813,1815,1817,1820,1822,1824,1827,1829,1832,1834,1836,1839],{"class":516,"line":705},[514,1806,1365],{"class":595},[514,1808,646],{"class":675},[514,1810,1370],{"class":642},[514,1812,888],{"class":524},[514,1814,1394],{"class":602},[514,1816,894],{"class":524},[514,1818,1819],{"class":602}," value",[514,1821,900],{"class":524},[514,1823,1376],{"class":524},[514,1825,1826],{"class":602}," Object",[514,1828,740],{"class":524},[514,1830,1831],{"class":635},"entries",[514,1833,639],{"class":675},[514,1835,1356],{"class":602},[514,1837,1838],{"class":675},")) ",[514,1840,748],{"class":524},[514,1842,1843],{"class":516,"line":710},[514,1844,1845],{"class":713},"    \u002F\u002F Check if key contains any sensitive keyword (case-insensitive)\n",[514,1847,1848,1850,1852,1855,1857,1860,1862,1865,1867,1869,1871,1874,1877,1879,1882,1884,1886,1889],{"class":516,"line":717},[514,1849,1389],{"class":595},[514,1851,646],{"class":675},[514,1853,1854],{"class":602},"SENSITIVE_KEYS",[514,1856,740],{"class":524},[514,1858,1859],{"class":635},"some",[514,1861,639],{"class":675},[514,1863,1864],{"class":649},"k",[514,1866,656],{"class":642},[514,1868,1373],{"class":602},[514,1870,740],{"class":524},[514,1872,1873],{"class":635},"toLowerCase",[514,1875,1876],{"class":675},"()",[514,1878,740],{"class":524},[514,1880,1881],{"class":635},"includes",[514,1883,639],{"class":675},[514,1885,1864],{"class":602},[514,1887,1888],{"class":675},"))) ",[514,1890,748],{"class":524},[514,1892,1893,1896,1898,1900,1903,1905,1907,1910],{"class":516,"line":723},[514,1894,1895],{"class":602},"      result",[514,1897,1414],{"class":675},[514,1899,1394],{"class":602},[514,1901,1902],{"class":675},"] ",[514,1904,1273],{"class":524},[514,1906,612],{"class":524},[514,1908,1909],{"class":615},"[REDACTED]",[514,1911,618],{"class":524},[514,1913,1914,1917,1920,1923,1925,1928,1931,1934,1936,1939,1941,1944,1946,1948,1951,1954,1956,1959,1961,1963,1965],{"class":516,"line":728},[514,1915,1916],{"class":524},"    }",[514,1918,1919],{"class":595}," else",[514,1921,1922],{"class":595}," if",[514,1924,646],{"class":675},[514,1926,1927],{"class":602},"value",[514,1929,1930],{"class":524}," &&",[514,1932,1933],{"class":524}," typeof",[514,1935,1819],{"class":602},[514,1937,1938],{"class":524}," ===",[514,1940,612],{"class":524},[514,1942,1943],{"class":615},"object",[514,1945,915],{"class":524},[514,1947,1930],{"class":524},[514,1949,1950],{"class":524}," !",[514,1952,1953],{"class":602},"Array",[514,1955,740],{"class":524},[514,1957,1958],{"class":635},"isArray",[514,1960,639],{"class":675},[514,1962,1927],{"class":602},[514,1964,1838],{"class":675},[514,1966,748],{"class":524},[514,1968,1969],{"class":516,"line":734},[514,1970,1971],{"class":713},"      \u002F\u002F Recursively sanitize nested objects\n",[514,1973,1974,1976,1978,1980,1982,1984,1986,1988,1990,1993,1995,1997,1999,2001,2003,2005],{"class":516,"line":751},[514,1975,1895],{"class":602},[514,1977,1414],{"class":675},[514,1979,1394],{"class":602},[514,1981,1902],{"class":675},[514,1983,1273],{"class":524},[514,1985,1740],{"class":635},[514,1987,639],{"class":675},[514,1989,1927],{"class":602},[514,1991,1992],{"class":595}," as",[514,1994,1231],{"class":520},[514,1996,1222],{"class":524},[514,1998,1236],{"class":520},[514,2000,894],{"class":524},[514,2002,1241],{"class":520},[514,2004,1336],{"class":524},[514,2006,680],{"class":675},[514,2008,2009,2011,2013],{"class":516,"line":761},[514,2010,1916],{"class":524},[514,2012,1919],{"class":595},[514,2014,528],{"class":524},[514,2016,2017,2019,2021,2023,2025,2027],{"class":516,"line":778},[514,2018,1895],{"class":602},[514,2020,1414],{"class":675},[514,2022,1394],{"class":602},[514,2024,1902],{"class":675},[514,2026,1273],{"class":524},[514,2028,2029],{"class":602}," value\n",[514,2031,2032],{"class":516,"line":803},[514,2033,1424],{"class":524},[514,2035,2036],{"class":516,"line":809},[514,2037,1430],{"class":524},[514,2039,2040],{"class":516,"line":815},[514,2041,624],{"emptyLinePlaceholder":623},[514,2043,2044,2046],{"class":516,"line":823},[514,2045,986],{"class":595},[514,2047,1438],{"class":602},[514,2049,2050],{"class":516,"line":1201},[514,2051,549],{"class":524},[514,2053,2054],{"class":516,"line":1206},[514,2055,624],{"emptyLinePlaceholder":623},[514,2057,2058,2060,2062,2065,2067,2069,2072,2074,2076],{"class":516,"line":1212},[514,2059,629],{"class":595},[514,2061,632],{"class":595},[514,2063,2064],{"class":635}," defineNitroPlugin",[514,2066,639],{"class":602},[514,2068,639],{"class":524},[514,2070,2071],{"class":649},"nitroApp",[514,2073,653],{"class":524},[514,2075,656],{"class":642},[514,2077,528],{"class":524},[514,2079,2080,2083,2085,2088,2090,2093,2095,2097,2100,2102,2104,2106,2109,2111,2113],{"class":516,"line":1247},[514,2081,2082],{"class":602},"  nitroApp",[514,2084,740],{"class":524},[514,2086,2087],{"class":602},"hooks",[514,2089,740],{"class":524},[514,2091,2092],{"class":635},"hook",[514,2094,639],{"class":675},[514,2096,915],{"class":524},[514,2098,2099],{"class":615},"evlog:drain",[514,2101,915],{"class":524},[514,2103,894],{"class":524},[514,2105,646],{"class":524},[514,2107,2108],{"class":649},"ctx",[514,2110,653],{"class":524},[514,2112,656],{"class":642},[514,2114,528],{"class":524},[514,2116,2117],{"class":516,"line":1260},[514,2118,2119],{"class":713},"    \u002F\u002F Sanitize before sending to external service\n",[514,2121,2122,2125,2127,2129,2131,2133,2135,2137,2139,2141,2143,2146,2148,2151,2153],{"class":516,"line":1324},[514,2123,2124],{"class":602},"    ctx",[514,2126,740],{"class":524},[514,2128,650],{"class":602},[514,2130,670],{"class":524},[514,2132,1740],{"class":635},[514,2134,639],{"class":675},[514,2136,2108],{"class":602},[514,2138,740],{"class":524},[514,2140,650],{"class":602},[514,2142,937],{"class":675},[514,2144,2145],{"class":595},"as",[514,2147,1933],{"class":524},[514,2149,2150],{"class":602}," ctx",[514,2152,740],{"class":524},[514,2154,2155],{"class":602},"event\n",[514,2157,2158,2160],{"class":516,"line":1341},[514,2159,818],{"class":524},[514,2161,680],{"class":675},[514,2163,2164,2166],{"class":516,"line":1362},[514,2165,826],{"class":524},[514,2167,680],{"class":602},[492,2169,2172],{"color":2170,"icon":2171},"warning","i-lucide-lightbulb","Drain hook sanitization is a safety net, not a replacement for careful logging practices. Always sanitize at the source.",[402,2174,2176],{"id":2175},"production-checklist","Production Checklist",[398,2178,2179],{},"Before deploying to production, verify:",[578,2181,2183],{"id":2182},"logging-configuration","Logging Configuration",[2185,2186,2189,2202,2208,2214],"ul",{"className":2187},[2188],"contains-task-list",[2190,2191,2194,2198,2199,653],"li",{"className":2192},[2193],"task-list-item",[2195,2196],"input",{"disabled":623,"type":2197},"checkbox"," Service name is set (",[511,2200,2201],{},"env.service",[2190,2203,2205,2207],{"className":2204},[2193],[2195,2206],{"disabled":623,"type":2197}," Sampling is configured for high-traffic routes",[2190,2209,2211,2213],{"className":2210},[2193],[2195,2212],{"disabled":623,"type":2197}," Log draining is set up for external service (Axiom, Loki, etc.)",[2190,2215,2217,2219,2220,653],{"className":2216},[2193],[2195,2218],{"disabled":623,"type":2197}," Pretty mode is disabled in production (",[511,2221,2222],{},"pretty: false",[578,2224,2226],{"id":2225},"data-security","Data Security",[2185,2228,2230,2238,2244,2250,2256,2262,2268],{"className":2229},[2188],[2190,2231,2233,2235,2236,653],{"className":2232},[2193],[2195,2234],{"disabled":623,"type":2197}," Auto-redaction is enabled (",[511,2237,571],{},[2190,2239,2241,2243],{"className":2240},[2193],[2195,2242],{"disabled":623,"type":2197}," No passwords or secrets in logs",[2190,2245,2247,2249],{"className":2246},[2193],[2195,2248],{"disabled":623,"type":2197}," No full credit card numbers (only last 4 digits)",[2190,2251,2253,2255],{"className":2252},[2193],[2195,2254],{"disabled":623,"type":2197}," No API keys or tokens",[2190,2257,2259,2261],{"className":2258},[2193],[2195,2260],{"disabled":623,"type":2197}," PII is masked or omitted (emails, phone numbers)",[2190,2263,2265,2267],{"className":2264},[2193],[2195,2266],{"disabled":623,"type":2197}," Session tokens are not logged",[2190,2269,2271,2273,2274,653],{"className":2270},[2193],[2195,2272],{"disabled":623,"type":2197}," Request bodies are selectively logged (not ",[511,2275,2276],{},"log.set({ body })",[578,2278,2280],{"id":2279},"error-handling","Error Handling",[2185,2282,2284,2294,2300],{"className":2283},[2188],[2190,2285,2287,2289,2290,2293],{"className":2286},[2193],[2195,2288],{"disabled":623,"type":2197}," Errors use ",[511,2291,2292],{},"createError()"," with structured fields",[2190,2295,2297,2299],{"className":2296},[2193],[2195,2298],{"disabled":623,"type":2197}," Sensitive data is not included in error messages",[2190,2301,2303,2305],{"className":2302},[2193],[2195,2304],{"disabled":623,"type":2197}," Stack traces don't expose internal paths in production",[402,2307,2309],{"id":2308},"field-naming-conventions","Field Naming Conventions",[398,2311,2312],{},"Use consistent, grouped field names across your codebase:",[503,2314,2316],{"className":505,"code":2315,"filename":1450,"language":508,"meta":509,"style":509},"\u002F\u002F ✅ Good - grouped and descriptive\nlog.set({\n  user: { id, plan, accountAge },\n  cart: { items, total, currency },\n  payment: { method, provider, last4 },\n})\n\n\u002F\u002F ❌ Bad - flat and abbreviated\nlog.set({\n  uid: '123',\n  n: 3,\n  t: 9999,\n  pm: 'card',\n})\n",[511,2317,2318,2323,2336,2361,2385,2409,2415,2419,2424,2436,2452,2464,2476,2491],{"__ignoreMap":509},[514,2319,2320],{"class":516,"line":517},[514,2321,2322],{"class":713},"\u002F\u002F ✅ Good - grouped and descriptive\n",[514,2324,2325,2328,2330,2332,2334],{"class":516,"line":531},[514,2326,2327],{"class":602},"log",[514,2329,740],{"class":524},[514,2331,743],{"class":635},[514,2333,639],{"class":602},[514,2335,748],{"class":524},[514,2337,2338,2341,2343,2345,2348,2350,2353,2355,2358],{"class":516,"line":546},[514,2339,2340],{"class":675},"  user",[514,2342,525],{"class":524},[514,2344,599],{"class":524},[514,2346,2347],{"class":602}," id",[514,2349,894],{"class":524},[514,2351,2352],{"class":602}," plan",[514,2354,894],{"class":524},[514,2356,2357],{"class":602}," accountAge ",[514,2359,2360],{"class":524},"},\n",[514,2362,2363,2366,2368,2370,2373,2375,2378,2380,2383],{"class":516,"line":661},[514,2364,2365],{"class":675},"  cart",[514,2367,525],{"class":524},[514,2369,599],{"class":524},[514,2371,2372],{"class":602}," items",[514,2374,894],{"class":524},[514,2376,2377],{"class":602}," total",[514,2379,894],{"class":524},[514,2381,2382],{"class":602}," currency ",[514,2384,2360],{"class":524},[514,2386,2387,2390,2392,2394,2397,2399,2402,2404,2407],{"class":516,"line":683},[514,2388,2389],{"class":675},"  payment",[514,2391,525],{"class":524},[514,2393,599],{"class":524},[514,2395,2396],{"class":602}," method",[514,2398,894],{"class":524},[514,2400,2401],{"class":602}," provider",[514,2403,894],{"class":524},[514,2405,2406],{"class":602}," last4 ",[514,2408,2360],{"class":524},[514,2410,2411,2413],{"class":516,"line":705},[514,2412,826],{"class":524},[514,2414,680],{"class":602},[514,2416,2417],{"class":516,"line":710},[514,2418,624],{"emptyLinePlaceholder":623},[514,2420,2421],{"class":516,"line":717},[514,2422,2423],{"class":713},"\u002F\u002F ❌ Bad - flat and abbreviated\n",[514,2425,2426,2428,2430,2432,2434],{"class":516,"line":723},[514,2427,2327],{"class":602},[514,2429,740],{"class":524},[514,2431,743],{"class":635},[514,2433,639],{"class":602},[514,2435,748],{"class":524},[514,2437,2438,2441,2443,2445,2448,2450],{"class":516,"line":728},[514,2439,2440],{"class":675},"  uid",[514,2442,525],{"class":524},[514,2444,612],{"class":524},[514,2446,2447],{"class":615},"123",[514,2449,915],{"class":524},[514,2451,543],{"class":524},[514,2453,2454,2457,2459,2462],{"class":516,"line":734},[514,2455,2456],{"class":675},"  n",[514,2458,525],{"class":524},[514,2460,2461],{"class":995}," 3",[514,2463,543],{"class":524},[514,2465,2466,2469,2471,2474],{"class":516,"line":751},[514,2467,2468],{"class":675},"  t",[514,2470,525],{"class":524},[514,2472,2473],{"class":995}," 9999",[514,2475,543],{"class":524},[514,2477,2478,2481,2483,2485,2487,2489],{"class":516,"line":761},[514,2479,2480],{"class":675},"  pm",[514,2482,525],{"class":524},[514,2484,612],{"class":524},[514,2486,1053],{"class":615},[514,2488,915],{"class":524},[514,2490,543],{"class":524},[514,2492,2493,2495],{"class":516,"line":778},[514,2494,826],{"class":524},[514,2496,680],{"class":602},[578,2498,2500],{"id":2499},"recommended-field-structure","Recommended Field Structure",[414,2502,2503,2512],{},[417,2504,2505],{},[420,2506,2507,2509],{},[423,2508,425],{},[423,2510,2511],{},"Fields",[433,2513,2514,2534,2555,2580,2600],{},[420,2515,2516,2520],{},[438,2517,2518],{},[511,2519,1591],{},[438,2521,2522,2524,2525,2524,2528,2524,2531],{},[511,2523,773],{},", ",[511,2526,2527],{},"plan",[511,2529,2530],{},"role",[511,2532,2533],{},"accountAge",[420,2535,2536,2541],{},[438,2537,2538],{},[511,2539,2540],{},"request",[438,2542,2543,2524,2546,2524,2549,2524,2552],{},[511,2544,2545],{},"method",[511,2547,2548],{},"path",[511,2550,2551],{},"requestId",[511,2553,2554],{},"traceId",[420,2556,2557,2566],{},[438,2558,2559,2562,2563],{},[511,2560,2561],{},"cart"," \u002F ",[511,2564,2565],{},"order",[438,2567,2568,2524,2571,2524,2574,2524,2577],{},[511,2569,2570],{},"items",[511,2572,2573],{},"total",[511,2575,2576],{},"currency",[511,2578,2579],{},"coupon",[420,2581,2582,2587],{},[438,2583,2584],{},[511,2585,2586],{},"payment",[438,2588,2589,2524,2591,2524,2594,2524,2597],{},[511,2590,2545],{},[511,2592,2593],{},"provider",[511,2595,2596],{},"last4",[511,2598,2599],{},"status",[420,2601,2602,2607],{},[438,2603,2604],{},[511,2605,2606],{},"outcome",[438,2608,2609,2524,2611,2524,2614],{},[511,2610,2599],{},[511,2612,2613],{},"duration",[511,2615,494],{},[402,2617,2619],{"id":2618},"sampling-strategy","Sampling Strategy",[398,2621,2622],{},"At scale, log volume can become expensive. Use sampling wisely:",[503,2624,2626],{"className":505,"code":2625,"filename":507,"language":508,"meta":509,"style":509},"export default defineNuxtConfig({\n  evlog: {\n    sampling: {\n      \u002F\u002F Head sampling: random percentage per level\n      rates: {\n        info: 10,    \u002F\u002F 10% of success logs\n        warn: 50,    \u002F\u002F 50% of warnings\n        debug: 0,    \u002F\u002F No debug logs in prod\n        error: 100,  \u002F\u002F Always keep errors\n      },\n      \u002F\u002F Tail sampling: force-keep based on outcome\n      keep: [\n        { duration: 1000 },           \u002F\u002F Slow requests (≥1s)\n        { status: 400 },              \u002F\u002F Client\u002Fserver errors\n        { path: '\u002Fapi\u002Fpayments\u002F**' }, \u002F\u002F Critical paths\n      ],\n    },\n  },\n})\n",[511,2627,2628,2641,2650,2659,2664,2673,2688,2703,2718,2733,2738,2743,2753,2772,2789,2810,2817,2821,2826],{"__ignoreMap":509},[514,2629,2630,2632,2634,2637,2639],{"class":516,"line":517},[514,2631,629],{"class":595},[514,2633,632],{"class":595},[514,2635,2636],{"class":635}," defineNuxtConfig",[514,2638,639],{"class":602},[514,2640,748],{"class":524},[514,2642,2643,2646,2648],{"class":516,"line":531},[514,2644,2645],{"class":675},"  evlog",[514,2647,525],{"class":524},[514,2649,528],{"class":524},[514,2651,2652,2655,2657],{"class":516,"line":546},[514,2653,2654],{"class":675},"    sampling",[514,2656,525],{"class":524},[514,2658,528],{"class":524},[514,2660,2661],{"class":516,"line":661},[514,2662,2663],{"class":713},"      \u002F\u002F Head sampling: random percentage per level\n",[514,2665,2666,2669,2671],{"class":516,"line":683},[514,2667,2668],{"class":675},"      rates",[514,2670,525],{"class":524},[514,2672,528],{"class":524},[514,2674,2675,2678,2680,2683,2685],{"class":516,"line":705},[514,2676,2677],{"class":675},"        info",[514,2679,525],{"class":524},[514,2681,2682],{"class":995}," 10",[514,2684,894],{"class":524},[514,2686,2687],{"class":713},"    \u002F\u002F 10% of success logs\n",[514,2689,2690,2693,2695,2698,2700],{"class":516,"line":710},[514,2691,2692],{"class":675},"        warn",[514,2694,525],{"class":524},[514,2696,2697],{"class":995}," 50",[514,2699,894],{"class":524},[514,2701,2702],{"class":713},"    \u002F\u002F 50% of warnings\n",[514,2704,2705,2708,2710,2713,2715],{"class":516,"line":717},[514,2706,2707],{"class":675},"        debug",[514,2709,525],{"class":524},[514,2711,2712],{"class":995}," 0",[514,2714,894],{"class":524},[514,2716,2717],{"class":713},"    \u002F\u002F No debug logs in prod\n",[514,2719,2720,2723,2725,2728,2730],{"class":516,"line":723},[514,2721,2722],{"class":675},"        error",[514,2724,525],{"class":524},[514,2726,2727],{"class":995}," 100",[514,2729,894],{"class":524},[514,2731,2732],{"class":713},"  \u002F\u002F Always keep errors\n",[514,2734,2735],{"class":516,"line":728},[514,2736,2737],{"class":524},"      },\n",[514,2739,2740],{"class":516,"line":734},[514,2741,2742],{"class":713},"      \u002F\u002F Tail sampling: force-keep based on outcome\n",[514,2744,2745,2748,2750],{"class":516,"line":751},[514,2746,2747],{"class":675},"      keep",[514,2749,525],{"class":524},[514,2751,2752],{"class":602}," [\n",[514,2754,2755,2758,2761,2763,2766,2769],{"class":516,"line":761},[514,2756,2757],{"class":524},"        {",[514,2759,2760],{"class":675}," duration",[514,2762,525],{"class":524},[514,2764,2765],{"class":995}," 1000",[514,2767,2768],{"class":524}," },",[514,2770,2771],{"class":713},"           \u002F\u002F Slow requests (≥1s)\n",[514,2773,2774,2776,2779,2781,2784,2786],{"class":516,"line":778},[514,2775,2757],{"class":524},[514,2777,2778],{"class":675}," status",[514,2780,525],{"class":524},[514,2782,2783],{"class":995}," 400",[514,2785,2768],{"class":524},[514,2787,2788],{"class":713},"              \u002F\u002F Client\u002Fserver errors\n",[514,2790,2791,2793,2796,2798,2800,2803,2805,2807],{"class":516,"line":803},[514,2792,2757],{"class":524},[514,2794,2795],{"class":675}," path",[514,2797,525],{"class":524},[514,2799,612],{"class":524},[514,2801,2802],{"class":615},"\u002Fapi\u002Fpayments\u002F**",[514,2804,915],{"class":524},[514,2806,2768],{"class":524},[514,2808,2809],{"class":713}," \u002F\u002F Critical paths\n",[514,2811,2812,2815],{"class":516,"line":809},[514,2813,2814],{"class":602},"      ]",[514,2816,543],{"class":524},[514,2818,2819],{"class":516,"line":815},[514,2820,812],{"class":524},[514,2822,2823],{"class":516,"line":823},[514,2824,2825],{"class":524},"  },\n",[514,2827,2828,2830],{"class":516,"line":1201},[514,2829,826],{"class":524},[514,2831,680],{"class":602},[492,2833,2835,2836,2839,2840,740],{"color":2834,"icon":13},"info","Use ",[511,2837,2838],{},"$production"," override to keep full logging in development while sampling in production. See ",[562,2841,2843],{"href":2842},"\u002Fframeworks\u002Fnuxt#sampling","Nuxt framework guide",[402,2845,2847],{"id":2846},"next-steps","Next Steps",[2185,2849,2850,2855,2860],{},[2190,2851,2852,2854],{},[562,2853,197],{"href":198}," - Built-in PII protection with smart masking",[2190,2856,2857,2859],{},[562,2858,51],{"href":52}," - Design effective wide events",[2190,2861,2862,2864],{},[562,2863,56],{"href":57}," - Error handling patterns",[2866,2867,2868],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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);}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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .s6hCs, html code.shiki .s6hCs{--shiki-light:#9C3EDA;--shiki-light-font-style:italic;--shiki-default:#C792EA;--shiki-default-font-style:italic;--shiki-dark:#C792EA;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":509,"searchDepth":531,"depth":531,"links":2870},[2871,2872,2873,2878,2883,2886,2887],{"id":404,"depth":531,"text":405},{"id":498,"depth":531,"text":197},{"id":575,"depth":531,"text":576,"children":2874},[2875,2876,2877],{"id":580,"depth":546,"text":581},{"id":831,"depth":546,"text":832},{"id":1658,"depth":546,"text":1659},{"id":2175,"depth":531,"text":2176,"children":2879},[2880,2881,2882],{"id":2182,"depth":546,"text":2183},{"id":2225,"depth":546,"text":2226},{"id":2279,"depth":546,"text":2280},{"id":2308,"depth":531,"text":2309,"children":2884},[2885],{"id":2499,"depth":546,"text":2500},{"id":2618,"depth":531,"text":2619},{"id":2846,"depth":531,"text":2847},"Security guidelines, data sanitization, and production tips for evlog. Learn what not to log and how to protect sensitive data.","md",[2891],{"label":290,"icon":2892,"to":295,"color":2893,"variant":2894},"i-lucide-plug","neutral","subtle",{},{"icon":129},{"title":185,"description":2888},"gUwG-pLDzZhJSFrP_6zOYbwC1M1w-hCYFV_7fs1rTm8",[2900,2902],{"title":180,"path":181,"stem":182,"description":2901,"icon":183,"children":-1},"Add compile-time type safety to your wide events with TypeScript module augmentation. Prevent typos and ensure consistent field names across your codebase.",{"title":123,"path":189,"stem":190,"description":2903,"icon":126,"children":-1},"evlog adds ~3µs per request. Faster than pino, consola, and winston in most scenarios while emitting richer, more useful events.",1778106402484]