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