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