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