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