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