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