[{"data":1,"prerenderedAt":2718},["ShallowReactive",2],{"navigation_docs":3,"-cli-config":612,"-cli-config-surround":2713},[4,35,85,148,328,489,548,587],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Start","\u002Fstart","1.start",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",{"title":30,"path":31,"stem":32,"icon":33},"Choose your logger","\u002Fstart\u002Ftypescript-logging-library","1.start\u002F5.typescript-logging-library","i-lucide-file-code",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Learn","\u002Flearn","2.learn",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":66,"path":67,"stem":68,"icon":69},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":71,"path":72,"stem":73,"icon":74},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":76,"path":77,"stem":78,"icon":79},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":81,"path":82,"stem":83,"icon":84},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":86,"path":87,"stem":88,"children":89,"page":34},"CLI","\u002Fcli","3.cli",[90,93,98,103,108,113,118,123,128,133,138,143],{"title":41,"path":91,"stem":92,"icon":49},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":94,"path":95,"stem":96,"icon":97},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":99,"path":100,"stem":101,"icon":102},"logs","\u002Fcli\u002Flogs","3.cli\u002F10.logs","i-lucide-scroll-text",{"title":104,"path":105,"stem":106,"icon":107},"config","\u002Fcli\u002Fconfig","3.cli\u002F11.config","i-lucide-settings-2",{"title":109,"path":110,"stem":111,"icon":112},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":114,"path":115,"stem":116,"icon":117},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":119,"path":120,"stem":121,"icon":122},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":124,"path":125,"stem":126,"icon":127},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":129,"path":130,"stem":131,"icon":132},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":134,"path":135,"stem":136,"icon":137},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":139,"path":140,"stem":141,"icon":142},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":144,"path":145,"stem":146,"icon":147},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":149,"path":150,"stem":151,"children":152,"page":34},"Integrate","\u002Fintegrate","4.integrate",[153,157,240],{"title":41,"path":154,"stem":155,"icon":156},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":158,"path":159,"stem":160,"children":161,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[162,165,195,220],{"title":41,"path":163,"stem":164,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":166,"path":167,"stem":168,"children":169,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[170,175,180,185,190],{"title":171,"path":172,"stem":173,"icon":174},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":176,"path":177,"stem":178,"icon":179},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":181,"path":182,"stem":183,"icon":184},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":186,"path":187,"stem":188,"icon":189},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":191,"path":192,"stem":193,"icon":194},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":196,"path":197,"stem":198,"children":199,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[200,205,210,215],{"title":201,"path":202,"stem":203,"icon":204},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":206,"path":207,"stem":208,"icon":209},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":211,"path":212,"stem":213,"icon":214},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":216,"path":217,"stem":218,"icon":219},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":221,"path":222,"stem":223,"children":224,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[225,230,235],{"title":226,"path":227,"stem":228,"icon":229},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":231,"path":232,"stem":233,"icon":234},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":236,"path":237,"stem":238,"icon":239},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":241,"path":242,"stem":243,"children":244,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[245,249,254,259,264,269,274,279,284,289,294,299,304,309,313,318,323],{"title":41,"path":246,"stem":247,"icon":248},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":250,"path":251,"stem":252,"icon":253},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":255,"path":256,"stem":257,"icon":258},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":260,"path":261,"stem":262,"icon":263},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":265,"path":266,"stem":267,"icon":268},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":270,"path":271,"stem":272,"icon":273},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":275,"path":276,"stem":277,"icon":278},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":280,"path":281,"stem":282,"icon":283},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":285,"path":286,"stem":287,"icon":288},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":290,"path":291,"stem":292,"icon":293},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":295,"path":296,"stem":297,"icon":298},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":300,"path":301,"stem":302,"icon":303},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":305,"path":306,"stem":307,"icon":308},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":310,"path":311,"stem":312,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":314,"path":315,"stem":316,"icon":317},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":319,"path":320,"stem":321,"icon":322},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":324,"path":325,"stem":326,"icon":327},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":329,"path":330,"stem":331,"children":332,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[333,336,341,369,396,428,449,454,459,463],{"title":41,"path":334,"stem":335,"icon":117},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":337,"path":338,"stem":339,"icon":340},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":342,"icon":343,"path":344,"stem":345,"children":346,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[347,350,355,360,365],{"title":41,"path":348,"stem":349,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":351,"path":352,"stem":353,"icon":354},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":356,"path":357,"stem":358,"icon":359},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":361,"path":362,"stem":363,"icon":364},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":366,"path":367,"stem":368,"icon":147},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":370,"icon":371,"path":372,"stem":373,"children":374,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[375,378,383,388,392],{"title":41,"path":376,"stem":377,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":379,"path":380,"stem":381,"icon":382},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":384,"path":385,"stem":386,"icon":387},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":389,"path":390,"stem":391,"icon":340},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":393,"path":394,"stem":395,"icon":122},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":397,"icon":398,"path":399,"stem":400,"children":401,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[402,405,410,415,420,424],{"title":41,"path":403,"stem":404,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":406,"path":407,"stem":408,"icon":409},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":411,"path":412,"stem":413,"icon":414},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":416,"path":417,"stem":418,"icon":419},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":421,"path":422,"stem":423,"icon":398},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":425,"path":426,"stem":427,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":366,"icon":122,"path":429,"stem":430,"children":431,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[432,435,440,445],{"title":41,"path":433,"stem":434,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":436,"path":437,"stem":438,"icon":439},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":441,"path":442,"stem":443,"icon":444},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":446,"path":447,"stem":448,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":450,"path":451,"stem":452,"icon":453},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":455,"path":456,"stem":457,"icon":458},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":460,"path":461,"stem":462,"icon":444},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":464,"icon":465,"path":466,"stem":467,"children":468,"page":34},"Signals","i-lucide-scan-search","\u002Fuse-cases\u002Fsignals","5.use-cases\u002F7.signals",[469,472,477,482,485],{"title":41,"path":470,"stem":471,"icon":44},"\u002Fuse-cases\u002Fsignals\u002Foverview","5.use-cases\u002F7.signals\u002F01.overview",{"title":473,"path":474,"stem":475,"icon":476},"What You Can Ask","\u002Fuse-cases\u002Fsignals\u002Fask","5.use-cases\u002F7.signals\u002F02.ask","i-lucide-message-circle-question",{"title":478,"path":479,"stem":480,"icon":481},"What It Costs","\u002Fuse-cases\u002Fsignals\u002Fcost","5.use-cases\u002F7.signals\u002F03.cost","i-lucide-coins",{"title":446,"path":483,"stem":484,"icon":84},"\u002Fuse-cases\u002Fsignals\u002Freference","5.use-cases\u002F7.signals\u002F04.reference",{"title":425,"path":486,"stem":487,"icon":488},"\u002Fuse-cases\u002Fsignals\u002Frecipes","5.use-cases\u002F7.signals\u002F05.recipes","i-lucide-lightbulb",{"title":490,"path":491,"stem":492,"children":493,"page":34},"Extend","\u002Fextend","6.extend",[494,498,503,508,512,517,521,525,529,533,538,543],{"title":41,"path":495,"stem":496,"icon":497},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":499,"path":500,"stem":501,"icon":502},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":504,"path":505,"stem":506,"icon":507},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":509,"path":510,"stem":511,"icon":502},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":513,"path":514,"stem":515,"icon":516},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":425,"path":518,"stem":519,"icon":520},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":522,"path":523,"stem":524,"icon":497},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":526,"path":527,"stem":528,"icon":453},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":530,"path":531,"stem":532,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":534,"path":535,"stem":536,"icon":537},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":539,"path":540,"stem":541,"icon":542},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":544,"path":545,"stem":546,"icon":547},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":446,"path":549,"stem":550,"children":551,"page":34},"\u002Freference","7.reference",[552,556,561,564,569,573,578,582],{"title":41,"path":553,"stem":554,"icon":555},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":557,"path":558,"stem":559,"icon":560},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":393,"path":562,"stem":563,"icon":122},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":565,"path":566,"stem":567,"icon":568},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":570,"path":571,"stem":572,"icon":398},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":574,"path":575,"stem":576,"icon":577},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":579,"path":580,"stem":581,"icon":453},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":583,"path":584,"stem":585,"icon":586},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":588,"path":589,"stem":590,"children":591,"page":34},"Compare","\u002Fcompare","8.compare",[592,596,600,604,608],{"title":593,"path":594,"stem":595,"icon":577},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":597,"path":598,"stem":599,"icon":214},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":601,"path":602,"stem":603,"icon":577},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":605,"path":606,"stem":607,"icon":577},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":609,"path":610,"stem":611,"icon":577},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":613,"title":614,"body":615,"description":2701,"extension":2702,"links":2703,"meta":2709,"navigation":2710,"path":105,"seo":2711,"stem":106,"__hash__":2712},"docs\u002F3.cli\u002F11.config.md","evlog.config",{"type":616,"value":617,"toc":2685},"minimark",[618,635,638,1104,1110,1126,1135,1146,1215,1220,1238,1251,1255,1263,1368,1373,1390,1404,1410,1425,1429,1437,1491,1506,1510,1525,1531,1542,1549,1558,1642,1654,1657,1771,1774,1780,1786,1792,1797,1803,1808,1818,2055,2061,2065,2079,2144,2148,2160,2242,2248,2254,2260,2290,2327,2331,2344,2510,2516,2526,2530,2549,2651,2654,2660,2664,2681],[619,620,621,622,626,627,630,631,634],"p",{},"Without a config file, the CI gate is a flag on every ",[623,624,625],"code",{},"evlog map"," run, a check you decided not to care about is disabled file by file, and sampling and redaction live in whichever file calls ",[623,628,629],{},"initLogger",". ",[623,632,633],{},"evlog.config.ts"," holds all of it, and a preset carries it from one repository to the next. The CLI reads the file without running it. The app runs it: the Nuxt and Nitro modules load it on their own, and any other app imports it.",[619,636,637],{},"Here an app builds on a shared preset, turns a check back on, and leaves its dev routes out of the map:",[639,640,641,924],"code-group",{},[642,643,648],"pre",{"className":644,"code":645,"filename":633,"language":646,"meta":647,"style":647},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineEvlog } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport preset from '.\u002Fevlog.preset'\n\nexport default defineEvlog({\n  extends: preset,\n  service: 'checkout',\n  drain: createAxiomDrain(),\n  sampling: { rates: { info: 25 } },\n  map: {\n    rules: { 'audit-coverage': 'on' },\n    ignore: ['src\u002Froutes\u002F_dev\u002F**'],\n  },\n  logs: { limit: 100 },\n})\n","ts","",[623,649,650,683,704,722,729,747,763,781,796,827,838,866,889,895,915],{"__ignoreMap":647},[651,652,655,659,663,667,670,673,676,680],"span",{"class":653,"line":654},"line",1,[651,656,658],{"class":657},"s7zQu","import",[651,660,662],{"class":661},"sMK4o"," {",[651,664,666],{"class":665},"sTEyZ"," defineEvlog",[651,668,669],{"class":661}," }",[651,671,672],{"class":657}," from",[651,674,675],{"class":661}," '",[651,677,679],{"class":678},"sfazB","evlog",[651,681,682],{"class":661},"'\n",[651,684,686,688,690,693,695,697,699,702],{"class":653,"line":685},2,[651,687,658],{"class":657},[651,689,662],{"class":661},[651,691,692],{"class":665}," createAxiomDrain",[651,694,669],{"class":661},[651,696,672],{"class":657},[651,698,675],{"class":661},[651,700,701],{"class":678},"evlog\u002Faxiom",[651,703,682],{"class":661},[651,705,707,709,712,715,717,720],{"class":653,"line":706},3,[651,708,658],{"class":657},[651,710,711],{"class":665}," preset ",[651,713,714],{"class":657},"from",[651,716,675],{"class":661},[651,718,719],{"class":678},".\u002Fevlog.preset",[651,721,682],{"class":661},[651,723,725],{"class":653,"line":724},4,[651,726,728],{"emptyLinePlaceholder":727},true,"\n",[651,730,732,735,738,741,744],{"class":653,"line":731},5,[651,733,734],{"class":657},"export",[651,736,737],{"class":657}," default",[651,739,666],{"class":740},"s2Zo4",[651,742,743],{"class":665},"(",[651,745,746],{"class":661},"{\n",[651,748,750,754,757,760],{"class":653,"line":749},6,[651,751,753],{"class":752},"swJcz","  extends",[651,755,756],{"class":661},":",[651,758,759],{"class":665}," preset",[651,761,762],{"class":661},",\n",[651,764,766,769,771,773,776,779],{"class":653,"line":765},7,[651,767,768],{"class":752},"  service",[651,770,756],{"class":661},[651,772,675],{"class":661},[651,774,775],{"class":678},"checkout",[651,777,778],{"class":661},"'",[651,780,762],{"class":661},[651,782,784,787,789,791,794],{"class":653,"line":783},8,[651,785,786],{"class":752},"  drain",[651,788,756],{"class":661},[651,790,692],{"class":740},[651,792,793],{"class":665},"()",[651,795,762],{"class":661},[651,797,799,802,804,806,809,811,813,816,818,822,824],{"class":653,"line":798},9,[651,800,801],{"class":752},"  sampling",[651,803,756],{"class":661},[651,805,662],{"class":661},[651,807,808],{"class":752}," rates",[651,810,756],{"class":661},[651,812,662],{"class":661},[651,814,815],{"class":752}," info",[651,817,756],{"class":661},[651,819,821],{"class":820},"sbssI"," 25",[651,823,669],{"class":661},[651,825,826],{"class":661}," },\n",[651,828,830,833,835],{"class":653,"line":829},10,[651,831,832],{"class":752},"  map",[651,834,756],{"class":661},[651,836,837],{"class":661}," {\n",[651,839,841,844,846,848,850,853,855,857,859,862,864],{"class":653,"line":840},11,[651,842,843],{"class":752},"    rules",[651,845,756],{"class":661},[651,847,662],{"class":661},[651,849,675],{"class":661},[651,851,852],{"class":752},"audit-coverage",[651,854,778],{"class":661},[651,856,756],{"class":661},[651,858,675],{"class":661},[651,860,861],{"class":678},"on",[651,863,778],{"class":661},[651,865,826],{"class":661},[651,867,869,872,874,877,879,882,884,887],{"class":653,"line":868},12,[651,870,871],{"class":752},"    ignore",[651,873,756],{"class":661},[651,875,876],{"class":665}," [",[651,878,778],{"class":661},[651,880,881],{"class":678},"src\u002Froutes\u002F_dev\u002F**",[651,883,778],{"class":661},[651,885,886],{"class":665},"]",[651,888,762],{"class":661},[651,890,892],{"class":653,"line":891},13,[651,893,894],{"class":661},"  },\n",[651,896,898,901,903,905,908,910,913],{"class":653,"line":897},14,[651,899,900],{"class":752},"  logs",[651,902,756],{"class":661},[651,904,662],{"class":661},[651,906,907],{"class":752}," limit",[651,909,756],{"class":661},[651,911,912],{"class":820}," 100",[651,914,826],{"class":661},[651,916,918,921],{"class":653,"line":917},15,[651,919,920],{"class":661},"}",[651,922,923],{"class":665},")\n",[642,925,928],{"className":644,"code":926,"filename":927,"language":646,"meta":647,"style":647},"import { defineEvlog } from 'evlog'\n\nexport default defineEvlog({\n  sampling: { rates: { info: 10, debug: 0 } },\n  redact: { paths: ['user.password', 'card.number'] },\n  map: { rules: { 'error-catalog': 'off', 'audit-coverage': 'off' }, minScore: 70 },\n})\n","evlog.preset.ts",[623,929,930,948,952,964,1000,1038,1098],{"__ignoreMap":647},[651,931,932,934,936,938,940,942,944,946],{"class":653,"line":654},[651,933,658],{"class":657},[651,935,662],{"class":661},[651,937,666],{"class":665},[651,939,669],{"class":661},[651,941,672],{"class":657},[651,943,675],{"class":661},[651,945,679],{"class":678},[651,947,682],{"class":661},[651,949,950],{"class":653,"line":685},[651,951,728],{"emptyLinePlaceholder":727},[651,953,954,956,958,960,962],{"class":653,"line":706},[651,955,734],{"class":657},[651,957,737],{"class":657},[651,959,666],{"class":740},[651,961,743],{"class":665},[651,963,746],{"class":661},[651,965,966,968,970,972,974,976,978,980,982,985,988,991,993,996,998],{"class":653,"line":724},[651,967,801],{"class":752},[651,969,756],{"class":661},[651,971,662],{"class":661},[651,973,808],{"class":752},[651,975,756],{"class":661},[651,977,662],{"class":661},[651,979,815],{"class":752},[651,981,756],{"class":661},[651,983,984],{"class":820}," 10",[651,986,987],{"class":661},",",[651,989,990],{"class":752}," debug",[651,992,756],{"class":661},[651,994,995],{"class":820}," 0",[651,997,669],{"class":661},[651,999,826],{"class":661},[651,1001,1002,1005,1007,1009,1012,1014,1016,1018,1021,1023,1025,1027,1030,1032,1035],{"class":653,"line":731},[651,1003,1004],{"class":752},"  redact",[651,1006,756],{"class":661},[651,1008,662],{"class":661},[651,1010,1011],{"class":752}," paths",[651,1013,756],{"class":661},[651,1015,876],{"class":665},[651,1017,778],{"class":661},[651,1019,1020],{"class":678},"user.password",[651,1022,778],{"class":661},[651,1024,987],{"class":661},[651,1026,675],{"class":661},[651,1028,1029],{"class":678},"card.number",[651,1031,778],{"class":661},[651,1033,1034],{"class":665},"] ",[651,1036,1037],{"class":661},"},\n",[651,1039,1040,1042,1044,1046,1049,1051,1053,1055,1058,1060,1062,1064,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085,1088,1091,1093,1096],{"class":653,"line":749},[651,1041,832],{"class":752},[651,1043,756],{"class":661},[651,1045,662],{"class":661},[651,1047,1048],{"class":752}," rules",[651,1050,756],{"class":661},[651,1052,662],{"class":661},[651,1054,675],{"class":661},[651,1056,1057],{"class":752},"error-catalog",[651,1059,778],{"class":661},[651,1061,756],{"class":661},[651,1063,675],{"class":661},[651,1065,1066],{"class":678},"off",[651,1068,778],{"class":661},[651,1070,987],{"class":661},[651,1072,675],{"class":661},[651,1074,852],{"class":752},[651,1076,778],{"class":661},[651,1078,756],{"class":661},[651,1080,675],{"class":661},[651,1082,1066],{"class":678},[651,1084,778],{"class":661},[651,1086,1087],{"class":661}," },",[651,1089,1090],{"class":752}," minScore",[651,1092,756],{"class":661},[651,1094,1095],{"class":820}," 70",[651,1097,826],{"class":661},[651,1099,1100,1102],{"class":653,"line":765},[651,1101,920],{"class":661},[651,1103,923],{"class":665},[619,1105,1106,1109],{},[623,1107,1108],{},"evlog config"," prints the merged result grouped by what each setting does, with the line it is written on, and fills in what evlog uses where the file says nothing:",[642,1111,1116],{"className":1112,"code":1113,"filename":1114,"language":1115,"meta":647,"style":647},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","evlog config\n","Terminal","bash",[623,1117,1118],{"__ignoreMap":647},[651,1119,1120,1123],{"class":653,"line":654},[651,1121,679],{"class":1122},"sBMFI",[651,1124,1125],{"class":678}," config\n",[642,1127,1133],{"className":1128,"code":1130,"filename":1131,"language":1132,"meta":647},[1129],"language-text","evlog.config.ts · extends .\u002Fevlog.preset → evlog.preset.ts\n\nService\n  service      checkout       evlog.config.ts:7\n  environment  from NODE_ENV  default\n\nSampling\n  trace  0%      default\n  debug  0%      evlog.preset.ts:4\n  info   25%     evlog.config.ts:9\n  warn   100%    default\n  error  100%    default\n  fatal  always  default\n\nRedaction\n  redact    on                                                 evlog.preset.ts:5\n  builtins  creditCard, email, ipv4, phone, jwt, bearer, iban  default\n  paths     user.password                                      evlog.preset.ts:5\n            card.number                                        evlog.preset.ts:5\n\nPipeline\n  drain  createAxiomDrain()  evlog.config.ts:8\n\nCLI · read by evlog map and evlog logs\n  map.rules.error-catalog   'off'                   evlog.preset.ts:6\n  map.rules.audit-coverage  'on'                    evlog.config.ts:11\n  map.minScore              70                      evlog.preset.ts:6\n  map.ignore                ['src\u002Froutes\u002F_dev\u002F**']  evlog.config.ts:12\n  logs.limit                100                     evlog.config.ts:14\n","Output","text",[623,1134,1130],{"__ignoreMap":647},[619,1136,1137,1138,1141,1142,1145],{},"Each redaction path keeps the line of the file that adds it, so a path the preset redacts never looks like the app's own. With ",[623,1139,1140],{},"routes",", the Service section becomes Services and lists each route's service in the order evlog matches them, the first match winning. A rate that changes nothing gets a warning under its row, such as a ",[623,1143,1144],{},"fatal"," rate, since fatal events are always kept.",[619,1147,1148,1149,1152,1153,1156,1157,1160,1161,1164,1165,1168,1169,1172,1173,1160,1176,1179,1180,1183,1184,630,1187,1190,1191,1194,1195,1198,1199,1202,1203,1206,1207,1210,1211,1214],{},"A value the file computes, like ",[623,1150,1151],{},"createAxiomDrain()",", is shown as the code that produces it. ",[623,1154,1155],{},"--json"," returns the settings written in the files as ",[623,1158,1159],{},"cli"," and ",[623,1162,1163],{},"app"," lists of ",[623,1166,1167],{},"{ path, value, source }",", one entry per item of ",[623,1170,1171],{},"redact.paths",", ",[623,1174,1175],{},"redact.patterns",[623,1177,1178],{},"sampling.keep",", with a computed value written as ",[623,1181,1182],{},"{ \"runtime\": \"createAxiomDrain()\" }"," and a regular expression as ",[623,1185,1186],{},"{ \"regexp\": \"\u002Facct_\\\\w+\u002Fg\" }",[623,1188,1189],{},"moduleOptions"," is ",[623,1192,1193],{},"{ file, readable }"," when ",[623,1196,1197],{},"nuxt.config.ts"," or ",[623,1200,1201],{},"nitro.config.ts"," passes options to the evlog module, with ",[623,1204,1205],{},"readable"," false when they are computed at runtime, and ",[623,1208,1209],{},"null"," otherwise. A setting those options replace carries ",[623,1212,1213],{},"overrides: { value, source }"," with the value of the file.",[1216,1217,1219],"h2",{"id":1218},"where-evlog-finds-the-file","Where evlog finds the file",[619,1221,1222,1223,1172,1225,1172,1228,1160,1231,1234,1235,1237],{},"The CLI and the Nuxt and Nitro modules look for ",[623,1224,633],{},[623,1226,1227],{},"evlog.config.mts",[623,1229,1230],{},"evlog.config.js",[623,1232,1233],{},"evlog.config.mjs",", in that order, starting in the app's package and walking up to the workspace root. The first file found applies on its own. Configs do not cascade, so an app with its own ",[623,1236,633],{}," ignores the one at the root unless it extends it.",[619,1239,1240,1241,1172,1244,1160,1247,1250],{},"Paths in ",[623,1242,1243],{},"map.ignore",[623,1245,1246],{},"map.baseline",[623,1248,1249],{},"logs.dir"," are relative to the package being mapped or read, not to the config file. One config at the root of a monorepo therefore fits every app in it.",[1216,1252,1254],{"id":1253},"gate-the-map-from-the-config","Gate the map from the config",[619,1256,1257,1259,1260,1262],{},[623,1258,625],{}," reads the ",[623,1261,109],{}," section, and a flag passed on the command line wins over the same setting.",[1264,1265,1266,1285],"table",{},[1267,1268,1269],"thead",{},[1270,1271,1272,1276,1279,1282],"tr",{},[1273,1274,1275],"th",{},"Setting",[1273,1277,1278],{},"Accepts",[1273,1280,1281],{},"Flag",[1273,1283,1284],{},"What it does",[1286,1287,1288,1307,1321,1339],"tbody",{},[1270,1289,1290,1296,1301,1304],{},[1291,1292,1293],"td",{},[623,1294,1295],{},"map.rules",[1291,1297,1298],{},[623,1299,1300],{},"{ [id]: 'on' | 'off' }",[1291,1302,1303],{},"none",[1291,1305,1306],{},"Turns a check off for every entry point, or back on when the preset turned it off",[1270,1308,1309,1313,1316,1318],{},[1291,1310,1311],{},[623,1312,1243],{},[1291,1314,1315],{},"list of globs",[1291,1317,1303],{},[1291,1319,1320],{},"Leaves the entry points whose file matches out of the map",[1270,1322,1323,1328,1331,1336],{},[1291,1324,1325],{},[623,1326,1327],{},"map.minScore",[1291,1329,1330],{},"whole number from 0 to 100",[1291,1332,1333],{},[623,1334,1335],{},"--min-score",[1291,1337,1338],{},"Exits 1 when the global score is below it",[1270,1340,1341,1345,1354,1359],{},[1291,1342,1343],{},[623,1344,1246],{},[1291,1346,1347,1350,1351],{},[623,1348,1349],{},"true",", a path, or ",[623,1352,1353],{},"git:\u003Cref>",[1291,1355,1356],{},[623,1357,1358],{},"--baseline",[1291,1360,1361,1362,1364,1365],{},"Exits 1 on a regression against the committed map, ",[623,1363,1349],{}," meaning ",[623,1366,1367],{},"evlog.map.json",[619,1369,1370,1372],{},[623,1371,1243],{}," matches the file an entry point is declared in. A Hono app that declares several routes in one file leaves them all out with one glob, and cannot leave out one of them alone.",[619,1374,1375,1376,1379,1380,1160,1383,1386,1387,1389],{},"The ids are the ones on ",[1377,1378,114],"a",{"href":115},". Every check can be turned off except ",[623,1381,1382],{},"wide-event",[623,1384,1385],{},"context",", because the map sorts entry points into instrumented, partial and dark by them. Leave those entry points out with ",[623,1388,1243],{}," instead.",[619,1391,1392,1393,1396,1397,1400,1401,1403],{},"A check turned off in the config becomes ",[623,1394,1395],{},"n\u002Fa"," on every entry point, with ",[623,1398,1399],{},"turned off in evlog.config"," as its message in ",[623,1402,1155],{},". The report says what the config changed above the score, and names the setting the gate came from:",[642,1405,1408],{"className":1406,"code":1407,"filename":1131,"language":1132,"meta":647},[1129],"evlog.config.ts: error-catalog off, 1 entry point ignored\n█▀█ ▀▀█   score \u002F100              checkout · Hono\n█▀█  ▀█   ▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▱▱▱    2 entry points scanned\n▀▀▀ ▀▀▀   good                    ▆█\n\n GATE  score 83 meets map.minScore 70 — exit code 0\n",[623,1409,1407],{"__ignoreMap":647},[619,1411,1412,1415,1416,1419,1420,1424],{},[623,1413,1414],{},"evlog map --min-score 95"," on the same project gates on 95 and says ",[623,1417,1418],{},"--min-score 95",". To turn a check off for one handler rather than the whole project, keep using a ",[1377,1421,1423],{"href":1422},"\u002Fcli\u002Frules#disabling-a-check","disable comment"," next to the code.",[1216,1426,1428],{"id":1427},"read-logs-from-another-directory","Read logs from another directory",[619,1430,1431,1259,1434,1436],{},[623,1432,1433],{},"evlog logs",[623,1435,99],{}," section, and its flags win the same way.",[1264,1438,1439,1451],{},[1267,1440,1441],{},[1270,1442,1443,1445,1447,1449],{},[1273,1444,1275],{},[1273,1446,1278],{},[1273,1448,1281],{},[1273,1450,1284],{},[1286,1452,1453,1473],{},[1270,1454,1455,1459,1462,1467],{},[1291,1456,1457],{},[623,1458,1249],{},[1291,1460,1461],{},"a path",[1291,1463,1464],{},[623,1465,1466],{},"--dir",[1291,1468,1469,1470],{},"Reads this directory instead of ",[623,1471,1472],{},".evlog\u002Flogs",[1270,1474,1475,1480,1483,1488],{},[1291,1476,1477],{},[623,1478,1479],{},"logs.limit",[1291,1481,1482],{},"whole number of 1 or more",[1291,1484,1485],{},[623,1486,1487],{},"--limit",[1291,1489,1490],{},"Shows at most this many events",[619,1492,1493,1172,1496,1499,1500,1502,1503,1505],{},[623,1494,1495],{},"--format",[623,1497,1498],{},"--verbose",", and ",[623,1501,1487],{}," on ",[623,1504,625],{}," stay flags only. They describe one run, not the project.",[1216,1507,1509],{"id":1508},"write-values-the-cli-can-read","Write values the CLI can read",[619,1511,1512,1513,1515,1516,1160,1518,1520,1521,1524],{},"The CLI parses ",[623,1514,633],{}," and never runs it, so every value under ",[623,1517,109],{},[623,1519,99],{}," has to be a literal, a ",[623,1522,1523],{},"const",", or a value imported from a local file. A call, an environment variable, or a value imported from a package stops the command:",[642,1526,1529],{"className":1527,"code":1528,"filename":1131,"language":1132,"meta":647},[1129],"logs.limit in evlog.config.ts:14 is computed at runtime\n→ Write the value inline, as a const, or import it from a local file\n",[623,1530,1528],{"__ignoreMap":647},[619,1532,1533,1534,1537,1538,1541],{},"The rest of the file is for the app and can compute anything: a drain, an ",[623,1535,1536],{},"enrich"," function, a sampling rate read from ",[623,1539,1540],{},"process.env",". The CLI lists those values without evaluating them.",[1216,1543,1545,1546],{"id":1544},"share-settings-with-extends","Share settings with ",[623,1547,1548],{},"extends",[619,1550,1551,1553,1554,1557],{},[623,1552,1548],{}," takes another config, imported from a local file or from a package. A preset published to npm is an ordinary module whose default export is ",[623,1555,1556],{},"defineEvlog({ ... })",", so a team installs it and extends it:",[642,1559,1561],{"className":644,"code":1560,"filename":633,"language":646,"meta":647,"style":647},"import { defineEvlog } from 'evlog'\nimport preset from '@acme\u002Fevlog-preset'\n\nexport default defineEvlog({\n  extends: preset,\n  service: 'checkout',\n})\n",[623,1562,1563,1581,1596,1600,1612,1622,1636],{"__ignoreMap":647},[651,1564,1565,1567,1569,1571,1573,1575,1577,1579],{"class":653,"line":654},[651,1566,658],{"class":657},[651,1568,662],{"class":661},[651,1570,666],{"class":665},[651,1572,669],{"class":661},[651,1574,672],{"class":657},[651,1576,675],{"class":661},[651,1578,679],{"class":678},[651,1580,682],{"class":661},[651,1582,1583,1585,1587,1589,1591,1594],{"class":653,"line":685},[651,1584,658],{"class":657},[651,1586,711],{"class":665},[651,1588,714],{"class":657},[651,1590,675],{"class":661},[651,1592,1593],{"class":678},"@acme\u002Fevlog-preset",[651,1595,682],{"class":661},[651,1597,1598],{"class":653,"line":706},[651,1599,728],{"emptyLinePlaceholder":727},[651,1601,1602,1604,1606,1608,1610],{"class":653,"line":724},[651,1603,734],{"class":657},[651,1605,737],{"class":657},[651,1607,666],{"class":740},[651,1609,743],{"class":665},[651,1611,746],{"class":661},[651,1613,1614,1616,1618,1620],{"class":653,"line":731},[651,1615,753],{"class":752},[651,1617,756],{"class":661},[651,1619,759],{"class":665},[651,1621,762],{"class":661},[651,1623,1624,1626,1628,1630,1632,1634],{"class":653,"line":749},[651,1625,768],{"class":752},[651,1627,756],{"class":661},[651,1629,675],{"class":661},[651,1631,775],{"class":678},[651,1633,778],{"class":661},[651,1635,762],{"class":661},[651,1637,1638,1640],{"class":653,"line":765},[651,1639,920],{"class":661},[651,1641,923],{"class":665},[619,1643,1644,1645,1648,1649,1160,1651,1653],{},"The CLI follows the package's ",[623,1646,1647],{},"exports"," to the file it ships and reads it the same way, so the preset's ",[623,1650,109],{},[623,1652,99],{}," have to be literals too.",[619,1655,1656],{},"Settings merge by kind:",[1264,1658,1659,1669],{},[1267,1660,1661],{},[1270,1662,1663,1666],{},[1273,1664,1665],{},"In the config",[1273,1667,1668],{},"Result",[1286,1670,1671,1690,1708,1721,1737,1751,1761],{},[1270,1672,1673,1687],{},[1291,1674,1675,1676,1172,1679,1172,1682,1172,1684],{},"A scalar or a function: ",[623,1677,1678],{},"service",[623,1680,1681],{},"drain",[623,1683,1536],{},[623,1685,1686],{},"keep",[1291,1688,1689],{},"The config's value replaces the preset's",[1270,1691,1692,1705],{},[1291,1693,1694,1695,1172,1698,1172,1700,1172,1703],{},"An object: ",[623,1696,1697],{},"sampling.rates",[623,1699,1140],{},[623,1701,1702],{},"env",[623,1704,1295],{},[1291,1706,1707],{},"Merged key by key, the config winning on each key",[1270,1709,1710,1718],{},[1291,1711,1712,1172,1714,1172,1716],{},[623,1713,1171],{},[623,1715,1175],{},[623,1717,1178],{},[1291,1719,1720],{},"The preset's entries, then the config's",[1270,1722,1723,1734],{},[1291,1724,1725,1726,1172,1728,1172,1731],{},"Any other list: ",[623,1727,1243],{},[623,1729,1730],{},"include",[623,1732,1733],{},"exclude",[1291,1735,1736],{},"The config's list replaces the preset's",[1270,1738,1739,1744],{},[1291,1740,1741],{},[623,1742,1743],{},"plugins",[1291,1745,1746,1747,1750],{},"Merged by ",[623,1748,1749],{},"name",", a config plugin replacing the preset plugin of the same name",[1270,1752,1753,1758],{},[1291,1754,1755],{},[623,1756,1757],{},"redact: false",[1291,1759,1760],{},"Redaction off",[1270,1762,1763,1768],{},[1291,1764,1765],{},[623,1766,1767],{},"redact: true",[1291,1769,1770],{},"The preset's redact settings, unchanged",[619,1772,1773],{},"Redaction paths and kept events add up rather than being replaced, so an app that lists its own paths cannot drop the ones the preset redacts.",[619,1775,1776,1777,1779],{},"A config extends one level only. When ",[623,1778,927],{}," itself extends a config, extending it fails and names both files:",[642,1781,1784],{"className":1782,"code":1783,"filename":1131,"language":1132,"meta":647},[1129],".\u002Fevlog.preset extends another config, so evlog.config.ts:6 cannot extend it\n→ Extend the config it extends directly, or copy the settings you need into one of the two files\n",[623,1785,1783],{"__ignoreMap":647},[619,1787,1788,1789,1791],{},"Every setting is then at most one file away from where it applies, and ",[623,1790,1108],{}," names that file.",[619,1793,1794,1796],{},[623,1795,1548],{}," takes the config itself, the value the app merges at runtime, so a path string is refused rather than resolved:",[642,1798,1801],{"className":1799,"code":1800,"filename":1131,"language":1132,"meta":647},[1129],"extends in evlog.config.ts:4 is the path '.\u002Fevlog.preset', not a config\n→ Import the config from that path as base, then set extends: base\n",[623,1802,1800],{"__ignoreMap":647},[1804,1805,1807],"h3",{"id":1806},"publish-a-preset-for-your-organization","Publish a preset for your organization",[619,1809,1810,1811,1814,1815,1817],{},"A preset package is one module and a ",[623,1812,1813],{},"package.json",". Ship it as JavaScript, so every app can bundle it without compiling a dependency, and list ",[623,1816,679],{}," as a peer so the preset and the app share one copy:",[639,1819,1820,1934],{},[642,1821,1825],{"className":1822,"code":1823,"filename":1813,"language":1824,"meta":647,"style":647},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"name\": \"@acme\u002Fevlog-preset\",\n  \"type\": \"module\",\n  \"exports\": \".\u002Findex.mjs\",\n  \"peerDependencies\": {\n    \"evlog\": \">=2.31.0\"\n  }\n}\n","json",[623,1826,1827,1831,1853,1873,1892,1905,1924,1929],{"__ignoreMap":647},[651,1828,1829],{"class":653,"line":654},[651,1830,746],{"class":661},[651,1832,1833,1836,1839,1842,1844,1847,1849,1851],{"class":653,"line":685},[651,1834,1835],{"class":661},"  \"",[651,1837,1749],{"class":1838},"spNyl",[651,1840,1841],{"class":661},"\"",[651,1843,756],{"class":661},[651,1845,1846],{"class":661}," \"",[651,1848,1593],{"class":678},[651,1850,1841],{"class":661},[651,1852,762],{"class":661},[651,1854,1855,1857,1860,1862,1864,1866,1869,1871],{"class":653,"line":706},[651,1856,1835],{"class":661},[651,1858,1859],{"class":1838},"type",[651,1861,1841],{"class":661},[651,1863,756],{"class":661},[651,1865,1846],{"class":661},[651,1867,1868],{"class":678},"module",[651,1870,1841],{"class":661},[651,1872,762],{"class":661},[651,1874,1875,1877,1879,1881,1883,1885,1888,1890],{"class":653,"line":724},[651,1876,1835],{"class":661},[651,1878,1647],{"class":1838},[651,1880,1841],{"class":661},[651,1882,756],{"class":661},[651,1884,1846],{"class":661},[651,1886,1887],{"class":678},".\u002Findex.mjs",[651,1889,1841],{"class":661},[651,1891,762],{"class":661},[651,1893,1894,1896,1899,1901,1903],{"class":653,"line":731},[651,1895,1835],{"class":661},[651,1897,1898],{"class":1838},"peerDependencies",[651,1900,1841],{"class":661},[651,1902,756],{"class":661},[651,1904,837],{"class":661},[651,1906,1907,1910,1912,1914,1916,1918,1921],{"class":653,"line":749},[651,1908,1909],{"class":661},"    \"",[651,1911,679],{"class":1122},[651,1913,1841],{"class":661},[651,1915,756],{"class":661},[651,1917,1846],{"class":661},[651,1919,1920],{"class":678},">=2.31.0",[651,1922,1923],{"class":661},"\"\n",[651,1925,1926],{"class":653,"line":765},[651,1927,1928],{"class":661},"  }\n",[651,1930,1931],{"class":653,"line":783},[651,1932,1933],{"class":661},"}\n",[642,1935,1940],{"className":1936,"code":1937,"filename":1938,"language":1939,"meta":647,"style":647},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineEvlog } from 'evlog'\n\nexport default defineEvlog({\n  sampling: { rates: { info: 10 } },\n  redact: { paths: ['user.email', 'card.number'] },\n  map: { minScore: 70 },\n})\n","index.mjs","js",[623,1941,1942,1960,1964,1976,2000,2033,2049],{"__ignoreMap":647},[651,1943,1944,1946,1948,1950,1952,1954,1956,1958],{"class":653,"line":654},[651,1945,658],{"class":657},[651,1947,662],{"class":661},[651,1949,666],{"class":665},[651,1951,669],{"class":661},[651,1953,672],{"class":657},[651,1955,675],{"class":661},[651,1957,679],{"class":678},[651,1959,682],{"class":661},[651,1961,1962],{"class":653,"line":685},[651,1963,728],{"emptyLinePlaceholder":727},[651,1965,1966,1968,1970,1972,1974],{"class":653,"line":706},[651,1967,734],{"class":657},[651,1969,737],{"class":657},[651,1971,666],{"class":740},[651,1973,743],{"class":665},[651,1975,746],{"class":661},[651,1977,1978,1980,1982,1984,1986,1988,1990,1992,1994,1996,1998],{"class":653,"line":724},[651,1979,801],{"class":752},[651,1981,756],{"class":661},[651,1983,662],{"class":661},[651,1985,808],{"class":752},[651,1987,756],{"class":661},[651,1989,662],{"class":661},[651,1991,815],{"class":752},[651,1993,756],{"class":661},[651,1995,984],{"class":820},[651,1997,669],{"class":661},[651,1999,826],{"class":661},[651,2001,2002,2004,2006,2008,2010,2012,2014,2016,2019,2021,2023,2025,2027,2029,2031],{"class":653,"line":731},[651,2003,1004],{"class":752},[651,2005,756],{"class":661},[651,2007,662],{"class":661},[651,2009,1011],{"class":752},[651,2011,756],{"class":661},[651,2013,876],{"class":665},[651,2015,778],{"class":661},[651,2017,2018],{"class":678},"user.email",[651,2020,778],{"class":661},[651,2022,987],{"class":661},[651,2024,675],{"class":661},[651,2026,1029],{"class":678},[651,2028,778],{"class":661},[651,2030,1034],{"class":665},[651,2032,1037],{"class":661},[651,2034,2035,2037,2039,2041,2043,2045,2047],{"class":653,"line":749},[651,2036,832],{"class":752},[651,2038,756],{"class":661},[651,2040,662],{"class":661},[651,2042,1090],{"class":752},[651,2044,756],{"class":661},[651,2046,1095],{"class":820},[651,2048,826],{"class":661},[651,2050,2051,2053],{"class":653,"line":765},[651,2052,920],{"class":661},[651,2054,923],{"class":665},[619,2056,2057,2058,2060],{},"Every repository that extends it starts from the same redaction, sampling and CI gate. A new rule rolls out as a version bump of the preset, and an app that needs an exception writes it in its own config, where ",[623,2059,1108],{}," shows it next to the setting it overrides.",[1216,2062,2064],{"id":2063},"use-the-config-in-your-app","Use the config in your app",[619,2066,2067,2068,2070,2071,2073,2074,1160,2076,2078],{},"The app runs the file, so the values the CLI only lists, a drain, an ",[623,2069,1536],{}," function, a rate read from ",[623,2072,1540],{},", apply there. ",[623,2075,109],{},[623,2077,99],{}," are left out. How the file reaches the app depends on the framework:",[1264,2080,2081,2091],{},[1267,2082,2083],{},[1270,2084,2085,2088],{},[1273,2086,2087],{},"Framework",[1273,2089,2090],{},"How the config applies",[1286,2092,2093,2101,2115,2127],{},[1270,2094,2095,2098],{},[1291,2096,2097],{},"Nuxt, Nitro, TanStack Start",[1291,2099,2100],{},"The evlog module finds and loads it",[1270,2102,2103,2106],{},[1291,2104,2105],{},"Eve agents",[1291,2107,2108,2111,2112],{},[623,2109,2110],{},"defineEvlogHook(config)"," in ",[623,2113,2114],{},"agent\u002Fhooks\u002Fevlog.ts",[1270,2116,2117,2119],{},[1291,2118,255],{},[1291,2120,2121,1160,2124],{},[623,2122,2123],{},"createEvlog(config)",[623,2125,2126],{},"createInstrumentation(toLoggerConfig(config))",[1270,2128,2129,2132],{},[1291,2130,2131],{},"Any other framework",[1291,2133,2134,2137,2138,1172,2140,2143],{},[623,2135,2136],{},"toLoggerConfig(config)"," where you call ",[623,2139,629],{},[623,2141,2142],{},"toMiddlewareOptions(config)"," where you register the middleware",[1804,2145,2147],{"id":2146},"nuxt-and-nitro-load-it-for-you","Nuxt and Nitro load it for you",[619,2149,2150,2151,1160,2154,2156,2157,2159],{},"The module looks the file up the same way the CLI does and bundles it into the server, so ",[623,2152,2153],{},"import.meta.dev",[623,2155,1540],{}," work in it as they do in server code. Options passed to the module override the file, merged with the ",[623,2158,1548],{}," rules:",[642,2161,2163],{"className":644,"code":2162,"filename":1197,"language":646,"meta":647,"style":647},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    sampling: { rates: { info: 100 } },\n  },\n})\n",[623,2164,2165,2178,2198,2207,2232,2236],{"__ignoreMap":647},[651,2166,2167,2169,2171,2174,2176],{"class":653,"line":654},[651,2168,734],{"class":657},[651,2170,737],{"class":657},[651,2172,2173],{"class":740}," defineNuxtConfig",[651,2175,743],{"class":665},[651,2177,746],{"class":661},[651,2179,2180,2183,2185,2187,2189,2192,2194,2196],{"class":653,"line":685},[651,2181,2182],{"class":752},"  modules",[651,2184,756],{"class":661},[651,2186,876],{"class":665},[651,2188,778],{"class":661},[651,2190,2191],{"class":678},"evlog\u002Fnuxt",[651,2193,778],{"class":661},[651,2195,886],{"class":665},[651,2197,762],{"class":661},[651,2199,2200,2203,2205],{"class":653,"line":706},[651,2201,2202],{"class":752},"  evlog",[651,2204,756],{"class":661},[651,2206,837],{"class":661},[651,2208,2209,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230],{"class":653,"line":724},[651,2210,2211],{"class":752},"    sampling",[651,2213,756],{"class":661},[651,2215,662],{"class":661},[651,2217,808],{"class":752},[651,2219,756],{"class":661},[651,2221,662],{"class":661},[651,2223,815],{"class":752},[651,2225,756],{"class":661},[651,2227,912],{"class":820},[651,2229,669],{"class":661},[651,2231,826],{"class":661},[651,2233,2234],{"class":653,"line":731},[651,2235,894],{"class":661},[651,2237,2238,2240],{"class":653,"line":749},[651,2239,920],{"class":661},[651,2241,923],{"class":665},[619,2243,2244,2245,2247],{},"This app keeps every info event whatever the file says, and the other rates in the file still apply. ",[623,2246,1108],{}," reads these options too. A note under the file name says they override it, and each setting they replace shows the value that wins, the line that sets it, and the value of the file under it:",[642,2249,2252],{"className":2250,"code":2251,"filename":1131,"language":1132,"meta":647},[1129],"evlog.config.ts · extends .\u002Fevlog.preset → evlog.preset.ts\nnuxt.config.ts passes options to the evlog module, and they override this file\n\nSampling\n  trace  0%      default\n  debug  0%      evlog.preset.ts:4\n  info   100%    nuxt.config.ts:4\n         overrides 25 at evlog.config.ts:9\n  warn   100%    default\n  error  100%    default\n  fatal  always  default\n",[623,2253,2251],{"__ignoreMap":647},[619,2255,2256,2257,2259],{},"Options computed at runtime, like a value read from a function call, keep the note but are not listed, since ",[623,2258,1108],{}," reads the files without running them.",[619,2261,2262,2263,1172,2265,1160,2267,2269,2270,1172,2273,1160,2276,2279,2280,2285,2286,2289],{},"The ",[623,2264,1681],{},[623,2266,1536],{},[623,2268,1686],{}," of the file run next to the ",[623,2271,2272],{},"evlog:drain",[623,2274,2275],{},"evlog:enrich",[623,2277,2278],{},"evlog:emit:keep"," hooks. A server plugin hooked there keeps working, and an event reaches both drains. A drain wrapped in ",[1377,2281,2282],{"href":545},[623,2283,2284],{},"createDrainPipeline"," is flushed when the server closes, so the file needs no ",[623,2287,2288],{},"close"," hook.",[619,2291,2292,2293,1172,2296,1160,2299,2302,2303,2305,2306,2308,2309,2312,2313,2316,2317,1160,2320,2323,2324,2326],{},"On Nuxt the browser logger also takes ",[623,2294,2295],{},"enabled",[623,2297,2298],{},"pretty",[623,2300,2301],{},"minLevel"," from the file. The ",[623,2304,679],{}," key in ",[623,2307,1197],{}," and the ",[623,2310,2311],{},"NUXT_PUBLIC_EVLOG_*"," variables still win, so ",[623,2314,2315],{},"NUXT_PUBLIC_EVLOG_MIN_LEVEL=debug"," lowers the threshold of a single deployment. The browser reads ",[623,2318,2319],{},"console",[623,2321,2322],{},"transport"," from ",[623,2325,1197],{}," only.",[1804,2328,2330],{"id":2329},"other-apps-import-it","Other apps import it",[619,2332,2333,2336,2337,2339,2340,2343],{},[623,2334,2335],{},"toLoggerConfig"," keeps the options ",[623,2338,629],{}," takes, and ",[623,2341,2342],{},"toMiddlewareOptions"," keeps the ones a framework middleware takes:",[642,2345,2348],{"className":644,"code":2346,"filename":2347,"language":646,"meta":647,"style":647},"import { Hono } from 'hono'\nimport { initLogger, toLoggerConfig, toMiddlewareOptions } from 'evlog'\nimport { evlog, type EvlogVariables } from 'evlog\u002Fhono'\nimport config from '..\u002Fevlog.config'\n\ninitLogger(toLoggerConfig(config))\n\nconst app = new Hono\u003CEvlogVariables>()\napp.use(evlog(toMiddlewareOptions(config)))\n","src\u002Findex.ts",[623,2349,2350,2370,2399,2427,2443,2447,2458,2462,2489],{"__ignoreMap":647},[651,2351,2352,2354,2356,2359,2361,2363,2365,2368],{"class":653,"line":654},[651,2353,658],{"class":657},[651,2355,662],{"class":661},[651,2357,2358],{"class":665}," Hono",[651,2360,669],{"class":661},[651,2362,672],{"class":657},[651,2364,675],{"class":661},[651,2366,2367],{"class":678},"hono",[651,2369,682],{"class":661},[651,2371,2372,2374,2376,2379,2381,2384,2386,2389,2391,2393,2395,2397],{"class":653,"line":685},[651,2373,658],{"class":657},[651,2375,662],{"class":661},[651,2377,2378],{"class":665}," initLogger",[651,2380,987],{"class":661},[651,2382,2383],{"class":665}," toLoggerConfig",[651,2385,987],{"class":661},[651,2387,2388],{"class":665}," toMiddlewareOptions",[651,2390,669],{"class":661},[651,2392,672],{"class":657},[651,2394,675],{"class":661},[651,2396,679],{"class":678},[651,2398,682],{"class":661},[651,2400,2401,2403,2405,2408,2410,2413,2416,2418,2420,2422,2425],{"class":653,"line":706},[651,2402,658],{"class":657},[651,2404,662],{"class":661},[651,2406,2407],{"class":665}," evlog",[651,2409,987],{"class":661},[651,2411,2412],{"class":657}," type",[651,2414,2415],{"class":665}," EvlogVariables",[651,2417,669],{"class":661},[651,2419,672],{"class":657},[651,2421,675],{"class":661},[651,2423,2424],{"class":678},"evlog\u002Fhono",[651,2426,682],{"class":661},[651,2428,2429,2431,2434,2436,2438,2441],{"class":653,"line":724},[651,2430,658],{"class":657},[651,2432,2433],{"class":665}," config ",[651,2435,714],{"class":657},[651,2437,675],{"class":661},[651,2439,2440],{"class":678},"..\u002Fevlog.config",[651,2442,682],{"class":661},[651,2444,2445],{"class":653,"line":731},[651,2446,728],{"emptyLinePlaceholder":727},[651,2448,2449,2451,2453,2455],{"class":653,"line":749},[651,2450,629],{"class":740},[651,2452,743],{"class":665},[651,2454,2335],{"class":740},[651,2456,2457],{"class":665},"(config))\n",[651,2459,2460],{"class":653,"line":765},[651,2461,728],{"emptyLinePlaceholder":727},[651,2463,2464,2466,2469,2472,2475,2477,2480,2483,2486],{"class":653,"line":783},[651,2465,1523],{"class":1838},[651,2467,2468],{"class":665}," app ",[651,2470,2471],{"class":661},"=",[651,2473,2474],{"class":661}," new",[651,2476,2358],{"class":740},[651,2478,2479],{"class":661},"\u003C",[651,2481,2482],{"class":1122},"EvlogVariables",[651,2484,2485],{"class":661},">",[651,2487,2488],{"class":665},"()\n",[651,2490,2491,2493,2496,2499,2501,2503,2505,2507],{"class":653,"line":798},[651,2492,1163],{"class":665},[651,2494,2495],{"class":661},".",[651,2497,2498],{"class":740},"use",[651,2500,743],{"class":665},[651,2502,679],{"class":740},[651,2504,743],{"class":665},[651,2506,2342],{"class":740},[651,2508,2509],{"class":665},"(config)))\n",[619,2511,2512,2513,2495],{},"An Eve agent spreads the config into its hook and adds its own options, see ",[1377,2514,2515],{"href":456},"Eve",[619,2517,2262,2518,2523,2524,1389],{},[1377,2519,2520],{"href":566},[623,2521,2522],{},"evlog\u002Fvite"," plugin does not read the file. Its auto-init is serialized at build time and cannot carry a drain, so import the config where you call ",[623,2525,629],{},[1216,2527,2529],{"id":2528},"when-the-config-cannot-be-read","When the config cannot be read",[619,2531,2532,1160,2534,2536,2537,2539,2540,2545,2546,2548],{},[623,2533,625],{},[623,2535,1108],{}," exit 1 on a config they cannot read, and ",[623,2538,1433],{}," exits 2. ",[1377,2541,2542],{"href":130},[623,2543,2544],{},"evlog doctor"," reports the same error as a failing ",[623,2547,104],{}," check. Each error carries a code from the CLI's catalog:",[1264,2550,2551,2561],{},[1267,2552,2553],{},[1270,2554,2555,2558],{},[1273,2556,2557],{},"Code",[1273,2559,2560],{},"Raised when",[1286,2562,2563,2573,2585,2603,2617,2629,2639],{},[1270,2564,2565,2570],{},[1291,2566,2567],{},[623,2568,2569],{},"cli.CONFIG_PARSE_FAILED",[1291,2571,2572],{},"The file has a syntax error",[1270,2574,2575,2580],{},[1291,2576,2577],{},[623,2578,2579],{},"cli.CONFIG_NO_EXPORT",[1291,2581,2582,2583],{},"There is no default export of an object or ",[623,2584,1556],{},[1270,2586,2587,2592],{},[1291,2588,2589],{},[623,2590,2591],{},"cli.CONFIG_NOT_STATIC",[1291,2593,2594,2595,2597,2598,1198,2600,2602],{},"The default export, ",[623,2596,1548],{},", or a ",[623,2599,109],{},[623,2601,99],{}," value is computed at runtime",[1270,2604,2605,2610],{},[1291,2606,2607],{},[623,2608,2609],{},"cli.CONFIG_INVALID",[1291,2611,2612,2613,1198,2615],{},"A setting is misspelt, has the wrong type, or turns off ",[623,2614,1382],{},[623,2616,1385],{},[1270,2618,2619,2624],{},[1291,2620,2621],{},[623,2622,2623],{},"cli.CONFIG_EXTENDS_NOT_FOUND",[1291,2625,2262,2626,2628],{},[623,2627,1548],{}," import does not lead to a file",[1270,2630,2631,2636],{},[1291,2632,2633],{},[623,2634,2635],{},"cli.CONFIG_EXTENDS_DEPTH",[1291,2637,2638],{},"The extended config extends another one",[1270,2640,2641,2646],{},[1291,2642,2643],{},[623,2644,2645],{},"cli.CONFIG_EXTENDS_STRING",[1291,2647,2648,2650],{},[623,2649,1548],{}," is a path string instead of an imported config",[619,2652,2653],{},"A misspelt key is an error rather than a setting quietly ignored:",[642,2655,2658],{"className":2656,"code":2657,"filename":1131,"language":1132,"meta":647},[1129],"logs.limt in evlog.config.ts:14 is not a setting; expected dir, limit\n→ Use a setting and a value the config reference lists\n",[623,2659,2657],{"__ignoreMap":647},[1216,2661,2663],{"id":2662},"next","Next",[2665,2666,2667,2676],"ul",{},[2668,2669,2670,2672,2673,2675],"li",{},[1377,2671,114],{"href":115},": the ids ",[623,2674,1295],{}," takes, and what each check expects",[2668,2677,2678,2680],{},[1377,2679,124],{"href":125},": gate a pull request on the score",[2682,2683,2684],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":647,"searchDepth":685,"depth":685,"links":2686},[2687,2688,2689,2690,2691,2695,2699,2700],{"id":1218,"depth":685,"text":1219},{"id":1253,"depth":685,"text":1254},{"id":1427,"depth":685,"text":1428},{"id":1508,"depth":685,"text":1509},{"id":1544,"depth":685,"text":2692,"children":2693},"Share settings with extends",[2694],{"id":1806,"depth":706,"text":1807},{"id":2063,"depth":685,"text":2064,"children":2696},[2697,2698],{"id":2146,"depth":706,"text":2147},{"id":2329,"depth":706,"text":2330},{"id":2528,"depth":685,"text":2529},{"id":2662,"depth":685,"text":2663},"One evlog.config.ts sets what evlog map checks, where evlog logs reads, and the sampling, redaction and drains your app applies.","md",[2704,2708],{"label":2705,"icon":117,"to":115,"color":2706,"variant":2707},"Map rules","neutral","subtle",{"label":66,"icon":69,"to":67,"color":2706,"variant":2707},{},{"title":104,"icon":107},{"title":614,"description":2701},"Gjt_TX1JLMi-ZDu-L_TzsxS6RbTsSIcZkOonWTDC4mw",[2714,2716],{"title":99,"path":100,"stem":101,"description":2715,"icon":102,"children":-1},"Read the wide events your app wrote to .evlog\u002Flogs from the terminal — the latest requests, the failures, the slowest, or one request in full.",{"title":109,"path":110,"stem":111,"description":2717,"icon":112,"children":-1},"Scan supported entry points for evlog logging patterns, inspect the static observability score, and prioritize fixes without running your handlers.",1791705334560]