[{"data":1,"prerenderedAt":2926},["ShallowReactive",2],{"navigation_docs":3,"-learn-redaction":567,"-learn-redaction-surround":2921},[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":66,"body":569,"description":2910,"extension":2911,"links":2912,"meta":2917,"navigation":2918,"path":67,"seo":2919,"stem":68,"__hash__":2920},"docs\u002F2.learn\u002F6.redaction.md",{"type":570,"value":571,"toc":2893},"minimark",[572,584,595,600,603,887,894,897,901,912,1054,1066,1069,1074,1092,1202,1279,1298,1305,1309,1312,1368,1372,1378,1461,1465,1472,1475,1607,1610,1683,1696,1702,1706,1712,1804,1821,1824,1845,1849,1852,1931,1935,2081,2098,2102,2105,2150,2162,2169,2173,2176,2635,2639,2642,2756,2761,2863,2866,2870,2889],[573,574,575,576,580,581,583],"p",{},"Wide events capture comprehensive context, which makes it easy to accidentally log sensitive data. Auto-redaction scrubs PII from events ",[577,578,579],"strong",{},"before"," console output and ",[577,582,579],{}," any drain sees the data.",[573,585,586,589,590,594],{},[577,587,588],{},"Redaction is enabled by default in production"," (",[591,592,593],"code",{},"NODE_ENV === 'production'","). In development, it is off so you see full values for debugging. No configuration needed, just deploy.",[596,597,599],"h2",{"id":598},"turn-it-off-or-narrow-it","Turn it off, or narrow it",[573,601,602],{},"If you need to disable redaction in production:",[604,605,606,708,809],"code-group",{},[607,608,614],"pre",{"className":609,"code":610,"filename":611,"language":612,"meta":613,"style":613},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    redact: false,\n  },\n})\n","nuxt.config.ts","typescript","",[591,615,616,640,668,679,693,699],{"__ignoreMap":613},[617,618,621,625,628,632,636],"span",{"class":619,"line":620},"line",1,[617,622,624],{"class":623},"s7zQu","export",[617,626,627],{"class":623}," default",[617,629,631],{"class":630},"s2Zo4"," defineNuxtConfig",[617,633,635],{"class":634},"sTEyZ","(",[617,637,639],{"class":638},"sMK4o","{\n",[617,641,643,647,650,653,656,660,662,665],{"class":619,"line":642},2,[617,644,646],{"class":645},"swJcz","  modules",[617,648,649],{"class":638},":",[617,651,652],{"class":634}," [",[617,654,655],{"class":638},"'",[617,657,659],{"class":658},"sfazB","evlog\u002Fnuxt",[617,661,655],{"class":638},[617,663,664],{"class":634},"]",[617,666,667],{"class":638},",\n",[617,669,671,674,676],{"class":619,"line":670},3,[617,672,673],{"class":645},"  evlog",[617,675,649],{"class":638},[617,677,678],{"class":638}," {\n",[617,680,682,685,687,691],{"class":619,"line":681},4,[617,683,684],{"class":645},"    redact",[617,686,649],{"class":638},[617,688,690],{"class":689},"sfNiH"," false",[617,692,667],{"class":638},[617,694,696],{"class":619,"line":695},5,[617,697,698],{"class":638},"  },\n",[617,700,702,705],{"class":619,"line":701},6,[617,703,704],{"class":638},"}",[617,706,707],{"class":634},")\n",[607,709,712],{"className":609,"code":710,"filename":711,"language":612,"meta":613,"style":613},"import { createEvlog } from 'evlog\u002Fnext'\n\nexport const { withEvlog, useLogger } = createEvlog({\n  service: 'my-app',\n  redact: false,\n})\n","lib\u002Fevlog.ts (Next.js)",[591,713,714,740,746,776,792,803],{"__ignoreMap":613},[617,715,716,719,722,725,728,731,734,737],{"class":619,"line":620},[617,717,718],{"class":623},"import",[617,720,721],{"class":638}," {",[617,723,724],{"class":634}," createEvlog",[617,726,727],{"class":638}," }",[617,729,730],{"class":623}," from",[617,732,733],{"class":638}," '",[617,735,736],{"class":658},"evlog\u002Fnext",[617,738,739],{"class":638},"'\n",[617,741,742],{"class":619,"line":642},[617,743,745],{"emptyLinePlaceholder":744},true,"\n",[617,747,748,750,754,756,759,762,765,767,770,772,774],{"class":619,"line":670},[617,749,624],{"class":623},[617,751,753],{"class":752},"spNyl"," const",[617,755,721],{"class":638},[617,757,758],{"class":634}," withEvlog",[617,760,761],{"class":638},",",[617,763,764],{"class":634}," useLogger ",[617,766,704],{"class":638},[617,768,769],{"class":638}," =",[617,771,724],{"class":630},[617,773,635],{"class":634},[617,775,639],{"class":638},[617,777,778,781,783,785,788,790],{"class":619,"line":681},[617,779,780],{"class":645},"  service",[617,782,649],{"class":638},[617,784,733],{"class":638},[617,786,787],{"class":658},"my-app",[617,789,655],{"class":638},[617,791,667],{"class":638},[617,793,794,797,799,801],{"class":619,"line":695},[617,795,796],{"class":645},"  redact",[617,798,649],{"class":638},[617,800,690],{"class":689},[617,802,667],{"class":638},[617,804,805,807],{"class":619,"line":701},[617,806,704],{"class":638},[617,808,707],{"class":634},[607,810,813],{"className":609,"code":811,"filename":812,"language":612,"meta":613,"style":613},"import { initLogger } from 'evlog'\n\ninitLogger({\n  env: { service: 'my-app' },\n  redact: false,\n})\n","index.ts (Hono \u002F Express \u002F Fastify)",[591,814,815,835,839,848,871,881],{"__ignoreMap":613},[617,816,817,819,821,824,826,828,830,833],{"class":619,"line":620},[617,818,718],{"class":623},[617,820,721],{"class":638},[617,822,823],{"class":634}," initLogger",[617,825,727],{"class":638},[617,827,730],{"class":623},[617,829,733],{"class":638},[617,831,832],{"class":658},"evlog",[617,834,739],{"class":638},[617,836,837],{"class":619,"line":642},[617,838,745],{"emptyLinePlaceholder":744},[617,840,841,844,846],{"class":619,"line":670},[617,842,843],{"class":630},"initLogger",[617,845,635],{"class":634},[617,847,639],{"class":638},[617,849,850,853,855,857,860,862,864,866,868],{"class":619,"line":681},[617,851,852],{"class":645},"  env",[617,854,649],{"class":638},[617,856,721],{"class":638},[617,858,859],{"class":645}," service",[617,861,649],{"class":638},[617,863,733],{"class":638},[617,865,787],{"class":658},[617,867,655],{"class":638},[617,869,870],{"class":638}," },\n",[617,872,873,875,877,879],{"class":619,"line":695},[617,874,796],{"class":645},[617,876,649],{"class":638},[617,878,690],{"class":689},[617,880,667],{"class":638},[617,882,883,885],{"class":619,"line":701},[617,884,704],{"class":638},[617,886,707],{"class":634},[573,888,889,890,893],{},"You can also enable redaction explicitly in development with ",[591,891,892],{},"redact: true",".",[895,896],"redaction-stream",{},[596,898,900],{"id":899},"mask-enough-to-still-debug","Mask enough to still debug",[573,902,903,904,907,908,911],{},"Built-in patterns use ",[577,905,906],{},"partial masking"," instead of flat ",[591,909,910],{},"[REDACTED]",", preserving enough context for debugging while protecting the actual data.",[913,914,915,931],"table",{},[916,917,918],"thead",{},[919,920,921,925,928],"tr",{},[922,923,924],"th",{},"Pattern",[922,926,927],{},"Example Input",[922,929,930],{},"Masked Output",[932,933,934,952,969,986,1003,1020,1037],"tbody",{},[919,935,936,942,947],{},[937,938,939],"td",{},[591,940,941],{},"creditCard",[937,943,944],{},[591,945,946],{},"4111111111111111",[937,948,949],{},[591,950,951],{},"****1111",[919,953,954,959,964],{},[937,955,956],{},[591,957,958],{},"email",[937,960,961],{},[591,962,963],{},"alice@example.com",[937,965,966],{},[591,967,968],{},"a***@***.com",[919,970,971,976,981],{},[937,972,973],{},[591,974,975],{},"ipv4",[937,977,978],{},[591,979,980],{},"192.168.1.100",[937,982,983],{},[591,984,985],{},"***.***.***.100",[919,987,988,993,998],{},[937,989,990],{},[591,991,992],{},"phone",[937,994,995],{},[591,996,997],{},"+33 6 12 34 56 78",[937,999,1000],{},[591,1001,1002],{},"+33 ****5678",[919,1004,1005,1010,1015],{},[937,1006,1007],{},[591,1008,1009],{},"jwt",[937,1011,1012],{},[591,1013,1014],{},"eyJhbGciOiJIUzI1NiIs...",[937,1016,1017],{},[591,1018,1019],{},"eyJ***.***",[919,1021,1022,1027,1032],{},[937,1023,1024],{},[591,1025,1026],{},"bearer",[937,1028,1029],{},[591,1030,1031],{},"Bearer sk_live_abc123...",[937,1033,1034],{},[591,1035,1036],{},"Bearer ***",[919,1038,1039,1044,1049],{},[937,1040,1041],{},[591,1042,1043],{},"iban",[937,1045,1046],{},[591,1047,1048],{},"FR76 3000 6000 0112 ...189",[937,1050,1051],{},[591,1052,1053],{},"FR76****189",[1055,1056,1058,1061,1062,1065],"callout",{"color":1057,"icon":13},"info",[591,1059,1060],{},"127.0.0.1"," and ",[591,1063,1064],{},"0.0.0.0"," are excluded from IPv4 masking since they are not real client addresses.",[596,1067,512],{"id":1068},"configuration",[1070,1071,1073],"h3",{"id":1072},"path-patterns","Path Patterns",[573,1075,1076,1077,1080,1081,1084,1085,1088,1089,649],{},"Use a single ",[591,1078,1079],{},"paths"," array with dot-notation and globs. A bare segment like ",[591,1082,1083],{},"password"," is shorthand for ",[591,1086,1087],{},"**.password",", so it redacts that key at ",[577,1090,1091],{},"any nesting depth",[607,1093,1095],{"className":609,"code":1094,"language":612,"meta":613,"style":613},"evlog: {\n  redact: {\n    paths: [\n      'password',              \u002F\u002F same as '**.password'\n      '*_token',               \u002F\u002F key-name glob at any depth\n      'headers.x-forwarded-for', \u002F\u002F exact path\n      'user.*',                \u002F\u002F everything directly under user\n    ],\n  }\n}\n",[591,1096,1097,1106,1114,1124,1139,1153,1167,1182,1190,1196],{"__ignoreMap":613},[617,1098,1099,1102,1104],{"class":619,"line":620},[617,1100,832],{"class":1101},"sBMFI",[617,1103,649],{"class":638},[617,1105,678],{"class":638},[617,1107,1108,1110,1112],{"class":619,"line":642},[617,1109,796],{"class":1101},[617,1111,649],{"class":638},[617,1113,678],{"class":638},[617,1115,1116,1119,1121],{"class":619,"line":670},[617,1117,1118],{"class":1101},"    paths",[617,1120,649],{"class":638},[617,1122,1123],{"class":645}," [\n",[617,1125,1126,1129,1131,1133,1135],{"class":619,"line":681},[617,1127,1128],{"class":638},"      '",[617,1130,1083],{"class":658},[617,1132,655],{"class":638},[617,1134,761],{"class":638},[617,1136,1138],{"class":1137},"sHwdD","              \u002F\u002F same as '**.password'\n",[617,1140,1141,1143,1146,1148,1150],{"class":619,"line":695},[617,1142,1128],{"class":638},[617,1144,1145],{"class":658},"*_token",[617,1147,655],{"class":638},[617,1149,761],{"class":638},[617,1151,1152],{"class":1137},"               \u002F\u002F key-name glob at any depth\n",[617,1154,1155,1157,1160,1162,1164],{"class":619,"line":701},[617,1156,1128],{"class":638},[617,1158,1159],{"class":658},"headers.x-forwarded-for",[617,1161,655],{"class":638},[617,1163,761],{"class":638},[617,1165,1166],{"class":1137}," \u002F\u002F exact path\n",[617,1168,1170,1172,1175,1177,1179],{"class":619,"line":1169},7,[617,1171,1128],{"class":638},[617,1173,1174],{"class":658},"user.*",[617,1176,655],{"class":638},[617,1178,761],{"class":638},[617,1180,1181],{"class":1137},"                \u002F\u002F everything directly under user\n",[617,1183,1185,1188],{"class":619,"line":1184},8,[617,1186,1187],{"class":645},"    ]",[617,1189,667],{"class":638},[617,1191,1193],{"class":619,"line":1192},9,[617,1194,1195],{"class":638},"  }\n",[617,1197,1199],{"class":619,"line":1198},10,[617,1200,1201],{"class":638},"}\n",[913,1203,1204,1213],{},[916,1205,1206],{},[919,1207,1208,1210],{},[922,1209,924],{},[922,1211,1212],{},"Matches",[932,1214,1215,1225,1239,1255,1269],{},[919,1216,1217,1222],{},[937,1218,1219],{},[591,1220,1221],{},"user.email",[937,1223,1224],{},"Exact path only",[919,1226,1227,1234],{},[937,1228,1229,1231,1232],{},[591,1230,1083],{}," or ",[591,1233,1087],{},[937,1235,1236,1238],{},[591,1237,1083],{}," key at any depth",[919,1240,1241,1245],{},[937,1242,1243],{},[591,1244,1145],{},[937,1246,1247,1248,1251,1252],{},"Key names like ",[591,1249,1250],{},"access_token",", ",[591,1253,1254],{},"refresh_token",[919,1256,1257,1261],{},[937,1258,1259],{},[591,1260,1174],{},[937,1262,1263,1251,1265,1268],{},[591,1264,1221],{},[591,1266,1267],{},"user.password",", etc.",[919,1270,1271,1276],{},[937,1272,1273],{},[591,1274,1275],{},"audit.changes.*.password",[937,1277,1278],{},"Mixed exact + wildcard segments",[573,1280,1281,1282,1285,1286,1289,1290,1293,1294,1297],{},"Path redaction replaces the ",[577,1283,1284],{},"entire value"," (including nested objects) with ",[591,1287,1288],{},"replacement",". Use ",[591,1291,1292],{},"patterns"," when you need regex on ",[577,1295,1296],{},"string values"," inside fields.",[573,1299,1300,1301,1304],{},"This matches ",[591,1302,1303],{},"auditDiff({ redactPaths: ['password'] })",", the same glob syntax, applied globally at emit time.",[1070,1306,1308],{"id":1307},"selective-built-ins","Selective Built-ins",[573,1310,1311],{},"Pick only the patterns you need:",[607,1313,1315],{"className":609,"code":1314,"language":612,"meta":613,"style":613},"evlog: {\n  redact: {\n    builtins: ['email', 'creditCard'],\n  }\n}\n",[591,1316,1317,1325,1333,1360,1364],{"__ignoreMap":613},[617,1318,1319,1321,1323],{"class":619,"line":620},[617,1320,832],{"class":1101},[617,1322,649],{"class":638},[617,1324,678],{"class":638},[617,1326,1327,1329,1331],{"class":619,"line":642},[617,1328,796],{"class":1101},[617,1330,649],{"class":638},[617,1332,678],{"class":638},[617,1334,1335,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1358],{"class":619,"line":670},[617,1336,1337],{"class":1101},"    builtins",[617,1339,649],{"class":638},[617,1341,652],{"class":645},[617,1343,655],{"class":638},[617,1345,958],{"class":658},[617,1347,655],{"class":638},[617,1349,761],{"class":638},[617,1351,733],{"class":638},[617,1353,941],{"class":658},[617,1355,655],{"class":638},[617,1357,664],{"class":645},[617,1359,667],{"class":638},[617,1361,1362],{"class":619,"line":681},[617,1363,1195],{"class":638},[617,1365,1366],{"class":619,"line":695},[617,1367,1201],{"class":638},[1070,1369,1371],{"id":1370},"custom-patterns","Custom Patterns",[573,1373,1374,1375,1377],{},"Add your own regex patterns. These use the flat ",[591,1376,1288],{}," string, not smart masking:",[607,1379,1381],{"className":609,"code":1380,"language":612,"meta":613,"style":613},"evlog: {\n  redact: {\n    patterns: [\u002FSECRET_\\w+\u002Fg, \u002Fsk_live_\\w+\u002Fg],\n    replacement: '***',\n  }\n}\n",[591,1382,1383,1391,1399,1437,1453,1457],{"__ignoreMap":613},[617,1384,1385,1387,1389],{"class":619,"line":620},[617,1386,832],{"class":1101},[617,1388,649],{"class":638},[617,1390,678],{"class":638},[617,1392,1393,1395,1397],{"class":619,"line":642},[617,1394,796],{"class":1101},[617,1396,649],{"class":638},[617,1398,678],{"class":638},[617,1400,1401,1404,1406,1408,1411,1414,1417,1421,1423,1426,1429,1431,1433,1435],{"class":619,"line":670},[617,1402,1403],{"class":1101},"    patterns",[617,1405,649],{"class":638},[617,1407,652],{"class":645},[617,1409,1410],{"class":638},"\u002F",[617,1412,1413],{"class":658},"SECRET_\\w",[617,1415,1416],{"class":638},"+\u002F",[617,1418,1420],{"class":1419},"sbssI","g",[617,1422,761],{"class":638},[617,1424,1425],{"class":638}," \u002F",[617,1427,1428],{"class":658},"sk_live_\\w",[617,1430,1416],{"class":638},[617,1432,1420],{"class":1419},[617,1434,664],{"class":645},[617,1436,667],{"class":638},[617,1438,1439,1442,1444,1446,1449,1451],{"class":619,"line":681},[617,1440,1441],{"class":1101},"    replacement",[617,1443,649],{"class":638},[617,1445,733],{"class":638},[617,1447,1448],{"class":658},"***",[617,1450,655],{"class":638},[617,1452,667],{"class":638},[617,1454,1455],{"class":619,"line":695},[617,1456,1195],{"class":638},[617,1458,1459],{"class":619,"line":701},[617,1460,1201],{"class":638},[1070,1462,1464],{"id":1463},"computed-replacements","Computed Replacements",[573,1466,1467,1468,1471],{},"When the replacement has to be ",[577,1469,1470],{},"derived"," from the value it replaces, pass a function instead of a string. It runs at the same point as the rest of redaction: before the console write, before any drain.",[573,1473,1474],{},"The common case is keeping requests correlatable without exposing the credential that identifies them:",[607,1476,1478],{"className":609,"code":1477,"language":612,"meta":613,"style":613},"initLogger({\n  redact: {\n    patterns: [\u002F\\\u002Fpublic\\\u002Fclaim\\\u002F([A-Za-z0-9._-]{12,})\u002Fg],\n    replacement: (_match, ctx) => `\u002Fpublic\u002Fclaim\u002F[tok:${fingerprint(ctx.groups[0])}]`,\n  },\n})\n\u002F\u002F \u002Fpublic\u002Fclaim\u002FeyJhbGciOi...  →  \u002Fpublic\u002Fclaim\u002F[tok:9f3a1c]\n",[591,1479,1480,1488,1496,1534,1592,1596,1602],{"__ignoreMap":613},[617,1481,1482,1484,1486],{"class":619,"line":620},[617,1483,843],{"class":630},[617,1485,635],{"class":634},[617,1487,639],{"class":638},[617,1489,1490,1492,1494],{"class":619,"line":642},[617,1491,796],{"class":645},[617,1493,649],{"class":638},[617,1495,678],{"class":638},[617,1497,1498,1500,1502,1504,1506,1509,1512,1514,1517,1519,1522,1525,1528,1530,1532],{"class":619,"line":670},[617,1499,1403],{"class":645},[617,1501,649],{"class":638},[617,1503,652],{"class":634},[617,1505,1410],{"class":638},[617,1507,1508],{"class":634},"\\\u002F",[617,1510,1511],{"class":658},"public",[617,1513,1508],{"class":634},[617,1515,1516],{"class":658},"claim",[617,1518,1508],{"class":634},[617,1520,1521],{"class":638},"([",[617,1523,1524],{"class":658},"A-Za-z0-9._-",[617,1526,1527],{"class":638},"]{12,})\u002F",[617,1529,1420],{"class":1419},[617,1531,664],{"class":634},[617,1533,667],{"class":638},[617,1535,1536,1538,1540,1542,1546,1548,1551,1554,1557,1560,1563,1566,1569,1572,1574,1577,1580,1583,1585,1587,1590],{"class":619,"line":681},[617,1537,1441],{"class":630},[617,1539,649],{"class":638},[617,1541,589],{"class":638},[617,1543,1545],{"class":1544},"sHdIc","_match",[617,1547,761],{"class":638},[617,1549,1550],{"class":1544}," ctx",[617,1552,1553],{"class":638},")",[617,1555,1556],{"class":752}," =>",[617,1558,1559],{"class":638}," `",[617,1561,1562],{"class":658},"\u002Fpublic\u002Fclaim\u002F[tok:",[617,1564,1565],{"class":638},"${",[617,1567,1568],{"class":630},"fingerprint",[617,1570,1571],{"class":634},"(ctx",[617,1573,893],{"class":638},[617,1575,1576],{"class":634},"groups[",[617,1578,1579],{"class":1419},"0",[617,1581,1582],{"class":634},"])",[617,1584,704],{"class":638},[617,1586,664],{"class":658},[617,1588,1589],{"class":638},"`",[617,1591,667],{"class":638},[617,1593,1594],{"class":619,"line":695},[617,1595,698],{"class":638},[617,1597,1598,1600],{"class":619,"line":701},[617,1599,704],{"class":638},[617,1601,707],{"class":634},[617,1603,1604],{"class":619,"line":1169},[617,1605,1606],{"class":1137},"\u002F\u002F \u002Fpublic\u002Fclaim\u002FeyJhbGciOi...  →  \u002Fpublic\u002Fclaim\u002F[tok:9f3a1c]\n",[573,1608,1609],{},"The function receives the matched value and a context object:",[913,1611,1612,1625],{},[916,1613,1614],{},[919,1615,1616,1619,1622],{},[922,1617,1618],{},"Field",[922,1620,1621],{},"Type",[922,1623,1624],{},"Description",[932,1626,1627,1647,1663],{},[919,1628,1629,1634,1639],{},[937,1630,1631],{},[591,1632,1633],{},"path",[937,1635,1636],{},[591,1637,1638],{},"string",[937,1640,1641,1642,1251,1644,1553],{},"Dot-notation path from the event root (",[591,1643,1221],{},[591,1645,1646],{},"items.0.token",[919,1648,1649,1654,1658],{},[937,1650,1651],{},[591,1652,1653],{},"key",[937,1655,1656],{},[591,1657,1638],{},[937,1659,1660,1661,1553],{},"Leaf key of the field (",[591,1662,958],{},[919,1664,1665,1670,1675],{},[937,1666,1667],{},[591,1668,1669],{},"groups",[937,1671,1672],{},[591,1673,1674],{},"string[]",[937,1676,1677,1678,1680,1681],{},"Capture groups of the matching ",[591,1679,1292],{}," entry. Only set for ",[591,1682,1292],{},[573,1684,1685,1686,1688,1689,1692,1693,1695],{},"For ",[591,1687,1079],{},", the matched value is the ",[577,1690,1691],{},"whole field value",", of any type, since path redaction replaces entire subtrees. For ",[591,1694,1292],{},", it is the matched substring.",[573,1697,1698,1699,1701],{},"If the function throws or returns a non-string, redaction falls back to ",[591,1700,910],{}," and logs the failure. A broken policy degrades to over-redaction, never to leaking the value it was meant to scrub.",[1070,1703,1705],{"id":1704},"conditional-policies","Conditional Policies",[573,1707,1708,1709,649],{},"Some policies cannot be expressed as a list of paths: redact a field only for certain tenants, only when a sibling field has a given value, or keep an allowlist rather than a denylist. Use ",[591,1710,1711],{},"transform",[607,1713,1715],{"className":609,"code":1714,"language":612,"meta":613,"style":613},"initLogger({\n  redact: {\n    transform: (event) => {\n      if (event.tenant === 'regulated') delete event.query\n    },\n  },\n})\n",[591,1716,1717,1725,1733,1751,1789,1794,1798],{"__ignoreMap":613},[617,1718,1719,1721,1723],{"class":619,"line":620},[617,1720,843],{"class":630},[617,1722,635],{"class":634},[617,1724,639],{"class":638},[617,1726,1727,1729,1731],{"class":619,"line":642},[617,1728,796],{"class":645},[617,1730,649],{"class":638},[617,1732,678],{"class":638},[617,1734,1735,1738,1740,1742,1745,1747,1749],{"class":619,"line":670},[617,1736,1737],{"class":630},"    transform",[617,1739,649],{"class":638},[617,1741,589],{"class":638},[617,1743,1744],{"class":1544},"event",[617,1746,1553],{"class":638},[617,1748,1556],{"class":752},[617,1750,678],{"class":638},[617,1752,1753,1756,1758,1760,1762,1765,1768,1770,1773,1775,1778,1781,1784,1786],{"class":619,"line":681},[617,1754,1755],{"class":623},"      if",[617,1757,589],{"class":645},[617,1759,1744],{"class":634},[617,1761,893],{"class":638},[617,1763,1764],{"class":634},"tenant",[617,1766,1767],{"class":638}," ===",[617,1769,733],{"class":638},[617,1771,1772],{"class":658},"regulated",[617,1774,655],{"class":638},[617,1776,1777],{"class":645},") ",[617,1779,1780],{"class":638},"delete",[617,1782,1783],{"class":634}," event",[617,1785,893],{"class":638},[617,1787,1788],{"class":634},"query\n",[617,1790,1791],{"class":619,"line":695},[617,1792,1793],{"class":638},"    },\n",[617,1795,1796],{"class":619,"line":701},[617,1797,698],{"class":638},[617,1799,1800,1802],{"class":619,"line":1169},[617,1801,704],{"class":638},[617,1803,707],{"class":634},[573,1805,1806,1808,1809,1811,1812,1251,1814,1817,1818,1820],{},[591,1807,1711],{}," runs ",[577,1810,579],{}," ",[591,1813,1079],{},[591,1815,1816],{},"builtins",", and ",[591,1819,1292],{},", so it sees raw values and the declarative rules still apply to whatever it leaves behind, and a hook that misses a field is not your last line of defence. Mutate the event in place; it is already a private clone, so the object you logged is never touched.",[573,1822,1823],{},"It must be synchronous, since it runs on the emit path before the console write. Errors are caught and reported like drain failures: the declarative stages still run and the event is still logged.",[1055,1825,1828,1829,1061,1831,1833,1834,1836,1837,1840,1841,1844],{"color":1826,"icon":1827},"warning","i-lucide-triangle-alert","Function-valued ",[591,1830,1288],{},[591,1832,1711],{}," cannot be declared in ",[591,1835,611],{}," or a Nitro module's options, that config is serialized to JSON at build time, which drops functions. Declare them at runtime with ",[591,1838,1839],{},"initLogger()"," from a server plugin, or with ",[591,1842,1843],{},"createEvlog()",". The modules emit a build-time warning if you do it anyway.",[1070,1846,1848],{"id":1847},"disable-built-ins","Disable Built-ins",[573,1850,1851],{},"If you only want custom redaction:",[607,1853,1855],{"className":609,"code":1854,"language":612,"meta":613,"style":613},"evlog: {\n  redact: {\n    builtins: false,\n    paths: ['user.ssn'],\n    patterns: [\u002FINTERNAL_\\w+\u002Fg],\n  }\n}\n",[591,1856,1857,1865,1873,1883,1902,1923,1927],{"__ignoreMap":613},[617,1858,1859,1861,1863],{"class":619,"line":620},[617,1860,832],{"class":1101},[617,1862,649],{"class":638},[617,1864,678],{"class":638},[617,1866,1867,1869,1871],{"class":619,"line":642},[617,1868,796],{"class":1101},[617,1870,649],{"class":638},[617,1872,678],{"class":638},[617,1874,1875,1877,1879,1881],{"class":619,"line":670},[617,1876,1337],{"class":1101},[617,1878,649],{"class":638},[617,1880,690],{"class":689},[617,1882,667],{"class":638},[617,1884,1885,1887,1889,1891,1893,1896,1898,1900],{"class":619,"line":681},[617,1886,1118],{"class":1101},[617,1888,649],{"class":638},[617,1890,652],{"class":645},[617,1892,655],{"class":638},[617,1894,1895],{"class":658},"user.ssn",[617,1897,655],{"class":638},[617,1899,664],{"class":645},[617,1901,667],{"class":638},[617,1903,1904,1906,1908,1910,1912,1915,1917,1919,1921],{"class":619,"line":695},[617,1905,1403],{"class":1101},[617,1907,649],{"class":638},[617,1909,652],{"class":645},[617,1911,1410],{"class":638},[617,1913,1914],{"class":658},"INTERNAL_\\w",[617,1916,1416],{"class":638},[617,1918,1420],{"class":1419},[617,1920,664],{"class":645},[617,1922,667],{"class":638},[617,1924,1925],{"class":619,"line":701},[617,1926,1195],{"class":638},[617,1928,1929],{"class":619,"line":1169},[617,1930,1201],{"class":638},[596,1932,1934],{"id":1933},"configuration-reference","Configuration Reference",[913,1936,1937,1951],{},[916,1938,1939],{},[919,1940,1941,1944,1946,1949],{},[922,1942,1943],{},"Option",[922,1945,1621],{},[922,1947,1948],{},"Default",[922,1950,1624],{},[932,1952,1953,1978,2004,2025,2044,2063],{},[919,1954,1955,1960,1965,1971],{},[937,1956,1957],{},[591,1958,1959],{},"redact",[937,1961,1962],{},[591,1963,1964],{},"boolean | RedactConfig",[937,1966,1967,1970],{},[591,1968,1969],{},"true"," in production",[937,1972,1973,1974,1977],{},"Enabled by default in production. ",[591,1975,1976],{},"false"," to disable. Object for fine-grained control",[919,1979,1980,1984,1988,1993],{},[937,1981,1982],{},[591,1983,1079],{},[937,1985,1986],{},[591,1987,1674],{},[937,1989,1990],{},[591,1991,1992],{},"undefined",[937,1994,1995,1996,1251,1998,1251,2000,1251,2002,1553],{},"Dot-notation paths with globs (",[591,1997,1083],{},[591,1999,1087],{},[591,2001,1145],{},[591,2003,1174],{},[919,2005,2006,2010,2015,2019],{},[937,2007,2008],{},[591,2009,1292],{},[937,2011,2012],{},[591,2013,2014],{},"RegExp[]",[937,2016,2017],{},[591,2018,1992],{},[937,2020,2021,2022,2024],{},"Custom regex on string values. Uses flat ",[591,2023,1288],{}," string",[919,2026,2027,2031,2036,2039],{},[937,2028,2029],{},[591,2030,1816],{},[937,2032,2033],{},[591,2034,2035],{},"false | string[]",[937,2037,2038],{},"All enabled",[937,2040,2041,2043],{},[591,2042,1976],{}," disables built-ins. Array selects specific ones",[919,2045,2046,2050,2055,2060],{},[937,2047,2048],{},[591,2049,1288],{},[937,2051,2052],{},[591,2053,2054],{},"string | (matched, ctx) => string",[937,2056,2057],{},[591,2058,2059],{},"'[REDACTED]'",[937,2061,2062],{},"Replacement for paths and custom patterns. Built-ins use smart masking instead. A function computes it from the matched value",[919,2064,2065,2069,2074,2078],{},[937,2066,2067],{},[591,2068,1711],{},[937,2070,2071],{},[591,2072,2073],{},"(event) => void",[937,2075,2076],{},[591,2077,1992],{},[937,2079,2080],{},"Escape hatch for policies that are conditional, tenant-scoped, or allowlist-shaped. Runs before the declarative stages",[573,2082,2083,2084,1251,2086,1251,2088,1251,2090,1251,2092,1251,2094,1251,2096,893],{},"Available built-in names: ",[591,2085,941],{},[591,2087,958],{},[591,2089,975],{},[591,2091,992],{},[591,2093,1009],{},[591,2095,1026],{},[591,2097,1043],{},[596,2099,2101],{"id":2100},"where-redaction-runs-in-the-pipeline","Where redaction runs in the pipeline",[573,2103,2104],{},"Redaction runs inside the emit pipeline, after the wide event is fully built but before any output:",[2106,2107,2108,2118,2126,2132,2138,2144],"ol",{},[2109,2110,2111,2114,2115,2117],"li",{},[577,2112,2113],{},"Transform",": your ",[591,2116,1711],{}," hook, if any, sees the raw event first",[2109,2119,2120,2123,2124],{},[577,2121,2122],{},"Path redaction",": exact paths and globs replaced with ",[591,2125,910],{},[2109,2127,2128,2131],{},[577,2129,2130],{},"Smart masking",": built-in patterns scan all string values recursively with partial masking",[2109,2133,2134,2137],{},[577,2135,2136],{},"Pattern redaction",": custom regex patterns scan all string values with flat replacement",[2109,2139,2140,2143],{},[577,2141,2142],{},"Console output",": masked event printed to stdout",[2109,2145,2146,2149],{},[577,2147,2148],{},"Drain",": masked event sent to external services",[573,2151,2152,2153,2156,2157,2159,2160,893],{},"Redaction is the only stage that runs before the console write. ",[591,2154,2155],{},"enrich"," and drains run after it, so they cannot scrub what has already reached stdout. Anything that needs to happen before output belongs in ",[591,2158,1711],{}," or a function-valued ",[591,2161,1288],{},[1055,2163,2164,2165,2168],{"color":1057,"icon":28},"Redaction runs ",[577,2166,2167],{},"after"," the HTTP response is sent, so it adds zero latency to your API responses.",[596,2170,2172],{"id":2171},"a-configuration-that-ships","A configuration that ships",[573,2174,2175],{},"Redaction is already on by default in production. Combine with sampling for a typical setup:",[604,2177,2178,2364,2506],{},[607,2179,2181],{"className":609,"code":2180,"filename":611,"language":612,"meta":613,"style":613},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    env: { service: 'my-app' },\n  },\n  $production: {\n    evlog: {\n      sampling: {\n        rates: { info: 10, debug: 0 },\n        keep: [{ status: 400 }, { duration: 1000 }],\n      },\n    },\n  },\n})\n",[591,2182,2183,2195,2213,2221,2242,2246,2255,2264,2273,2302,2341,2347,2352,2357],{"__ignoreMap":613},[617,2184,2185,2187,2189,2191,2193],{"class":619,"line":620},[617,2186,624],{"class":623},[617,2188,627],{"class":623},[617,2190,631],{"class":630},[617,2192,635],{"class":634},[617,2194,639],{"class":638},[617,2196,2197,2199,2201,2203,2205,2207,2209,2211],{"class":619,"line":642},[617,2198,646],{"class":645},[617,2200,649],{"class":638},[617,2202,652],{"class":634},[617,2204,655],{"class":638},[617,2206,659],{"class":658},[617,2208,655],{"class":638},[617,2210,664],{"class":634},[617,2212,667],{"class":638},[617,2214,2215,2217,2219],{"class":619,"line":670},[617,2216,673],{"class":645},[617,2218,649],{"class":638},[617,2220,678],{"class":638},[617,2222,2223,2226,2228,2230,2232,2234,2236,2238,2240],{"class":619,"line":681},[617,2224,2225],{"class":645},"    env",[617,2227,649],{"class":638},[617,2229,721],{"class":638},[617,2231,859],{"class":645},[617,2233,649],{"class":638},[617,2235,733],{"class":638},[617,2237,787],{"class":658},[617,2239,655],{"class":638},[617,2241,870],{"class":638},[617,2243,2244],{"class":619,"line":695},[617,2245,698],{"class":638},[617,2247,2248,2251,2253],{"class":619,"line":701},[617,2249,2250],{"class":645},"  $production",[617,2252,649],{"class":638},[617,2254,678],{"class":638},[617,2256,2257,2260,2262],{"class":619,"line":1169},[617,2258,2259],{"class":645},"    evlog",[617,2261,649],{"class":638},[617,2263,678],{"class":638},[617,2265,2266,2269,2271],{"class":619,"line":1184},[617,2267,2268],{"class":645},"      sampling",[617,2270,649],{"class":638},[617,2272,678],{"class":638},[617,2274,2275,2278,2280,2282,2285,2287,2290,2292,2295,2297,2300],{"class":619,"line":1192},[617,2276,2277],{"class":645},"        rates",[617,2279,649],{"class":638},[617,2281,721],{"class":638},[617,2283,2284],{"class":645}," info",[617,2286,649],{"class":638},[617,2288,2289],{"class":1419}," 10",[617,2291,761],{"class":638},[617,2293,2294],{"class":645}," debug",[617,2296,649],{"class":638},[617,2298,2299],{"class":1419}," 0",[617,2301,870],{"class":638},[617,2303,2304,2307,2309,2311,2314,2317,2319,2322,2325,2327,2330,2332,2335,2337,2339],{"class":619,"line":1198},[617,2305,2306],{"class":645},"        keep",[617,2308,649],{"class":638},[617,2310,652],{"class":634},[617,2312,2313],{"class":638},"{",[617,2315,2316],{"class":645}," status",[617,2318,649],{"class":638},[617,2320,2321],{"class":1419}," 400",[617,2323,2324],{"class":638}," },",[617,2326,721],{"class":638},[617,2328,2329],{"class":645}," duration",[617,2331,649],{"class":638},[617,2333,2334],{"class":1419}," 1000",[617,2336,727],{"class":638},[617,2338,664],{"class":634},[617,2340,667],{"class":638},[617,2342,2344],{"class":619,"line":2343},11,[617,2345,2346],{"class":638},"      },\n",[617,2348,2350],{"class":619,"line":2349},12,[617,2351,1793],{"class":638},[617,2353,2355],{"class":619,"line":2354},13,[617,2356,698],{"class":638},[617,2358,2360,2362],{"class":619,"line":2359},14,[617,2361,704],{"class":638},[617,2363,707],{"class":634},[607,2365,2367],{"className":609,"code":2366,"filename":711,"language":612,"meta":613,"style":613},"import { createEvlog } from 'evlog\u002Fnext'\n\nexport const { withEvlog, useLogger } = createEvlog({\n  service: 'my-app',\n  sampling: {\n    rates: { info: 10, debug: 0 },\n    keep: [{ status: 400 }, { duration: 1000 }],\n  },\n})\n",[591,2368,2369,2387,2391,2415,2429,2438,2463,2496,2500],{"__ignoreMap":613},[617,2370,2371,2373,2375,2377,2379,2381,2383,2385],{"class":619,"line":620},[617,2372,718],{"class":623},[617,2374,721],{"class":638},[617,2376,724],{"class":634},[617,2378,727],{"class":638},[617,2380,730],{"class":623},[617,2382,733],{"class":638},[617,2384,736],{"class":658},[617,2386,739],{"class":638},[617,2388,2389],{"class":619,"line":642},[617,2390,745],{"emptyLinePlaceholder":744},[617,2392,2393,2395,2397,2399,2401,2403,2405,2407,2409,2411,2413],{"class":619,"line":670},[617,2394,624],{"class":623},[617,2396,753],{"class":752},[617,2398,721],{"class":638},[617,2400,758],{"class":634},[617,2402,761],{"class":638},[617,2404,764],{"class":634},[617,2406,704],{"class":638},[617,2408,769],{"class":638},[617,2410,724],{"class":630},[617,2412,635],{"class":634},[617,2414,639],{"class":638},[617,2416,2417,2419,2421,2423,2425,2427],{"class":619,"line":681},[617,2418,780],{"class":645},[617,2420,649],{"class":638},[617,2422,733],{"class":638},[617,2424,787],{"class":658},[617,2426,655],{"class":638},[617,2428,667],{"class":638},[617,2430,2431,2434,2436],{"class":619,"line":695},[617,2432,2433],{"class":645},"  sampling",[617,2435,649],{"class":638},[617,2437,678],{"class":638},[617,2439,2440,2443,2445,2447,2449,2451,2453,2455,2457,2459,2461],{"class":619,"line":701},[617,2441,2442],{"class":645},"    rates",[617,2444,649],{"class":638},[617,2446,721],{"class":638},[617,2448,2284],{"class":645},[617,2450,649],{"class":638},[617,2452,2289],{"class":1419},[617,2454,761],{"class":638},[617,2456,2294],{"class":645},[617,2458,649],{"class":638},[617,2460,2299],{"class":1419},[617,2462,870],{"class":638},[617,2464,2465,2468,2470,2472,2474,2476,2478,2480,2482,2484,2486,2488,2490,2492,2494],{"class":619,"line":1169},[617,2466,2467],{"class":645},"    keep",[617,2469,649],{"class":638},[617,2471,652],{"class":634},[617,2473,2313],{"class":638},[617,2475,2316],{"class":645},[617,2477,649],{"class":638},[617,2479,2321],{"class":1419},[617,2481,2324],{"class":638},[617,2483,721],{"class":638},[617,2485,2329],{"class":645},[617,2487,649],{"class":638},[617,2489,2334],{"class":1419},[617,2491,727],{"class":638},[617,2493,664],{"class":634},[617,2495,667],{"class":638},[617,2497,2498],{"class":619,"line":1184},[617,2499,698],{"class":638},[617,2501,2502,2504],{"class":619,"line":1192},[617,2503,704],{"class":638},[617,2505,707],{"class":634},[607,2507,2509],{"className":609,"code":2508,"filename":812,"language":612,"meta":613,"style":613},"import { initLogger } from 'evlog'\n\ninitLogger({\n  env: { service: 'my-app' },\n  sampling: {\n    rates: { info: 10, debug: 0 },\n    keep: [{ status: 400 }, { duration: 1000 }],\n  },\n})\n",[591,2510,2511,2529,2533,2541,2561,2569,2593,2625,2629],{"__ignoreMap":613},[617,2512,2513,2515,2517,2519,2521,2523,2525,2527],{"class":619,"line":620},[617,2514,718],{"class":623},[617,2516,721],{"class":638},[617,2518,823],{"class":634},[617,2520,727],{"class":638},[617,2522,730],{"class":623},[617,2524,733],{"class":638},[617,2526,832],{"class":658},[617,2528,739],{"class":638},[617,2530,2531],{"class":619,"line":642},[617,2532,745],{"emptyLinePlaceholder":744},[617,2534,2535,2537,2539],{"class":619,"line":670},[617,2536,843],{"class":630},[617,2538,635],{"class":634},[617,2540,639],{"class":638},[617,2542,2543,2545,2547,2549,2551,2553,2555,2557,2559],{"class":619,"line":681},[617,2544,852],{"class":645},[617,2546,649],{"class":638},[617,2548,721],{"class":638},[617,2550,859],{"class":645},[617,2552,649],{"class":638},[617,2554,733],{"class":638},[617,2556,787],{"class":658},[617,2558,655],{"class":638},[617,2560,870],{"class":638},[617,2562,2563,2565,2567],{"class":619,"line":695},[617,2564,2433],{"class":645},[617,2566,649],{"class":638},[617,2568,678],{"class":638},[617,2570,2571,2573,2575,2577,2579,2581,2583,2585,2587,2589,2591],{"class":619,"line":701},[617,2572,2442],{"class":645},[617,2574,649],{"class":638},[617,2576,721],{"class":638},[617,2578,2284],{"class":645},[617,2580,649],{"class":638},[617,2582,2289],{"class":1419},[617,2584,761],{"class":638},[617,2586,2294],{"class":645},[617,2588,649],{"class":638},[617,2590,2299],{"class":1419},[617,2592,870],{"class":638},[617,2594,2595,2597,2599,2601,2603,2605,2607,2609,2611,2613,2615,2617,2619,2621,2623],{"class":619,"line":1169},[617,2596,2467],{"class":645},[617,2598,649],{"class":638},[617,2600,652],{"class":634},[617,2602,2313],{"class":638},[617,2604,2316],{"class":645},[617,2606,649],{"class":638},[617,2608,2321],{"class":1419},[617,2610,2324],{"class":638},[617,2612,721],{"class":638},[617,2614,2329],{"class":645},[617,2616,649],{"class":638},[617,2618,2334],{"class":1419},[617,2620,727],{"class":638},[617,2622,664],{"class":634},[617,2624,667],{"class":638},[617,2626,2627],{"class":619,"line":1184},[617,2628,698],{"class":638},[617,2630,2631,2633],{"class":619,"line":1192},[617,2632,704],{"class":638},[617,2634,707],{"class":634},[596,2636,2638],{"id":2637},"see-what-a-redacted-event-looks-like","See what a redacted event looks like",[573,2640,2641],{},"Without redaction, sensitive data lands in your logs and drains:",[607,2643,2647],{"className":2644,"code":2645,"language":2646,"meta":613,"style":613},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"user\": { \"email\": \"alice@example.com\", \"ip\": \"192.168.1.42\" },\n  \"payment\": { \"card\": \"4111111111111111\" },\n  \"auth\": \"Bearer sk_live_abc123def456\"\n}\n","json",[591,2648,2649,2653,2703,2733,2752],{"__ignoreMap":613},[617,2650,2651],{"class":619,"line":620},[617,2652,639],{"class":638},[617,2654,2655,2658,2661,2664,2666,2668,2671,2673,2675,2677,2679,2681,2683,2685,2687,2690,2692,2694,2696,2699,2701],{"class":619,"line":642},[617,2656,2657],{"class":638},"  \"",[617,2659,2660],{"class":752},"user",[617,2662,2663],{"class":638},"\"",[617,2665,649],{"class":638},[617,2667,721],{"class":638},[617,2669,2670],{"class":638}," \"",[617,2672,958],{"class":1101},[617,2674,2663],{"class":638},[617,2676,649],{"class":638},[617,2678,2670],{"class":638},[617,2680,963],{"class":658},[617,2682,2663],{"class":638},[617,2684,761],{"class":638},[617,2686,2670],{"class":638},[617,2688,2689],{"class":1101},"ip",[617,2691,2663],{"class":638},[617,2693,649],{"class":638},[617,2695,2670],{"class":638},[617,2697,2698],{"class":658},"192.168.1.42",[617,2700,2663],{"class":638},[617,2702,870],{"class":638},[617,2704,2705,2707,2710,2712,2714,2716,2718,2721,2723,2725,2727,2729,2731],{"class":619,"line":670},[617,2706,2657],{"class":638},[617,2708,2709],{"class":752},"payment",[617,2711,2663],{"class":638},[617,2713,649],{"class":638},[617,2715,721],{"class":638},[617,2717,2670],{"class":638},[617,2719,2720],{"class":1101},"card",[617,2722,2663],{"class":638},[617,2724,649],{"class":638},[617,2726,2670],{"class":638},[617,2728,946],{"class":658},[617,2730,2663],{"class":638},[617,2732,870],{"class":638},[617,2734,2735,2737,2740,2742,2744,2746,2749],{"class":619,"line":681},[617,2736,2657],{"class":638},[617,2738,2739],{"class":752},"auth",[617,2741,2663],{"class":638},[617,2743,649],{"class":638},[617,2745,2670],{"class":638},[617,2747,2748],{"class":658},"Bearer sk_live_abc123def456",[617,2750,2751],{"class":638},"\"\n",[617,2753,2754],{"class":619,"line":695},[617,2755,1201],{"class":638},[573,2757,2758,2759,649],{},"With ",[591,2760,892],{},[607,2762,2764],{"className":2644,"code":2763,"language":2646,"meta":613,"style":613},"{\n  \"user\": { \"email\": \"a***@***.com\", \"ip\": \"***.***.***.42\" },\n  \"payment\": { \"card\": \"****1111\" },\n  \"auth\": \"Bearer ***\"\n}\n",[591,2765,2766,2770,2815,2843,2859],{"__ignoreMap":613},[617,2767,2768],{"class":619,"line":620},[617,2769,639],{"class":638},[617,2771,2772,2774,2776,2778,2780,2782,2784,2786,2788,2790,2792,2794,2796,2798,2800,2802,2804,2806,2808,2811,2813],{"class":619,"line":642},[617,2773,2657],{"class":638},[617,2775,2660],{"class":752},[617,2777,2663],{"class":638},[617,2779,649],{"class":638},[617,2781,721],{"class":638},[617,2783,2670],{"class":638},[617,2785,958],{"class":1101},[617,2787,2663],{"class":638},[617,2789,649],{"class":638},[617,2791,2670],{"class":638},[617,2793,968],{"class":658},[617,2795,2663],{"class":638},[617,2797,761],{"class":638},[617,2799,2670],{"class":638},[617,2801,2689],{"class":1101},[617,2803,2663],{"class":638},[617,2805,649],{"class":638},[617,2807,2670],{"class":638},[617,2809,2810],{"class":658},"***.***.***.42",[617,2812,2663],{"class":638},[617,2814,870],{"class":638},[617,2816,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841],{"class":619,"line":670},[617,2818,2657],{"class":638},[617,2820,2709],{"class":752},[617,2822,2663],{"class":638},[617,2824,649],{"class":638},[617,2826,721],{"class":638},[617,2828,2670],{"class":638},[617,2830,2720],{"class":1101},[617,2832,2663],{"class":638},[617,2834,649],{"class":638},[617,2836,2670],{"class":638},[617,2838,951],{"class":658},[617,2840,2663],{"class":638},[617,2842,870],{"class":638},[617,2844,2845,2847,2849,2851,2853,2855,2857],{"class":619,"line":681},[617,2846,2657],{"class":638},[617,2848,2739],{"class":752},[617,2850,2663],{"class":638},[617,2852,649],{"class":638},[617,2854,2670],{"class":638},[617,2856,1036],{"class":658},[617,2858,2751],{"class":638},[617,2860,2861],{"class":619,"line":695},[617,2862,1201],{"class":638},[573,2864,2865],{},"Same debugging context, no PII in your Axiom\u002FDatadog\u002FSentry.",[596,2867,2869],{"id":2868},"next-steps","Next Steps",[2871,2872,2873,2879,2884],"ul",{},[2109,2874,2875,2878],{},[2876,2877,525],"a",{"href":526}," - Security guidelines and production checklist",[2109,2880,2881,2883],{},[2876,2882,61],{"href":62}," - Control log volume in production",[2109,2885,2886,2888],{},[2876,2887,512],{"href":513}," - Full configuration reference",[2890,2891,2892],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .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}",{"title":613,"searchDepth":642,"depth":642,"links":2894},[2895,2896,2897,2905,2906,2907,2908,2909],{"id":598,"depth":642,"text":599},{"id":899,"depth":642,"text":900},{"id":1068,"depth":642,"text":512,"children":2898},[2899,2900,2901,2902,2903,2904],{"id":1072,"depth":670,"text":1073},{"id":1307,"depth":670,"text":1308},{"id":1370,"depth":670,"text":1371},{"id":1463,"depth":670,"text":1464},{"id":1704,"depth":670,"text":1705},{"id":1847,"depth":670,"text":1848},{"id":1933,"depth":642,"text":1934},{"id":2100,"depth":642,"text":2101},{"id":2171,"depth":642,"text":2172},{"id":2637,"depth":642,"text":2638},{"id":2868,"depth":642,"text":2869},"Automatically scrub PII from wide events before console output and drains. Built-in smart masking for credit cards, emails, IPs, phone numbers, JWTs, and more.","md",[2913,2916],{"label":525,"icon":383,"to":526,"color":2914,"variant":2915},"neutral","subtle",{"label":512,"icon":515,"to":513,"color":2914,"variant":2915},{},{"icon":69},{"title":66,"description":2910},"BddDysgE5EvJnZL6femnn3q9qDtIP8Ilo0sFEBXWQXI",[2922,2924],{"title":61,"path":62,"stem":63,"description":2923,"icon":64,"children":-1},"Two-tier sampling: head sampling drops noise by level, and tail sampling keeps an event once its outcome is known.",{"title":71,"path":72,"stem":73,"description":2925,"icon":74,"children":-1},"Add compile-time type safety to your wide events with TypeScript module augmentation. Prevent typos and ensure consistent field names across your codebase.",1788921641171]