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