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