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