[{"data":1,"prerenderedAt":1373},["ShallowReactive",2],{"navigation_docs":3,"-use-cases-telemetry-overview":607,"-use-cases-telemetry-overview-surround":1368},[4,35,85,143,323,484,543,582],{"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],{"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},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":109,"path":110,"stem":111,"icon":112},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":114,"path":115,"stem":116,"icon":117},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":119,"path":120,"stem":121,"icon":122},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":124,"path":125,"stem":126,"icon":127},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":129,"path":130,"stem":131,"icon":132},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":134,"path":135,"stem":136,"icon":137},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":139,"path":140,"stem":141,"icon":142},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":144,"path":145,"stem":146,"children":147,"page":34},"Integrate","\u002Fintegrate","4.integrate",[148,152,235],{"title":41,"path":149,"stem":150,"icon":151},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":153,"path":154,"stem":155,"children":156,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[157,160,190,215],{"title":41,"path":158,"stem":159,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":161,"path":162,"stem":163,"children":164,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[165,170,175,180,185],{"title":166,"path":167,"stem":168,"icon":169},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":171,"path":172,"stem":173,"icon":174},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":176,"path":177,"stem":178,"icon":179},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":181,"path":182,"stem":183,"icon":184},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":186,"path":187,"stem":188,"icon":189},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":191,"path":192,"stem":193,"children":194,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[195,200,205,210],{"title":196,"path":197,"stem":198,"icon":199},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":201,"path":202,"stem":203,"icon":204},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":206,"path":207,"stem":208,"icon":209},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":211,"path":212,"stem":213,"icon":214},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":216,"path":217,"stem":218,"children":219,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[220,225,230],{"title":221,"path":222,"stem":223,"icon":224},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":226,"path":227,"stem":228,"icon":229},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":231,"path":232,"stem":233,"icon":234},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":236,"path":237,"stem":238,"children":239,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[240,244,249,254,259,264,269,274,279,284,289,294,299,304,308,313,318],{"title":41,"path":241,"stem":242,"icon":243},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":245,"path":246,"stem":247,"icon":248},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":250,"path":251,"stem":252,"icon":253},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":255,"path":256,"stem":257,"icon":258},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":260,"path":261,"stem":262,"icon":263},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":265,"path":266,"stem":267,"icon":268},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":270,"path":271,"stem":272,"icon":273},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":275,"path":276,"stem":277,"icon":278},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":280,"path":281,"stem":282,"icon":283},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":285,"path":286,"stem":287,"icon":288},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":290,"path":291,"stem":292,"icon":293},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":295,"path":296,"stem":297,"icon":298},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":300,"path":301,"stem":302,"icon":303},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":305,"path":306,"stem":307,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":309,"path":310,"stem":311,"icon":312},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":314,"path":315,"stem":316,"icon":317},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":319,"path":320,"stem":321,"icon":322},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":324,"path":325,"stem":326,"children":327,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[328,331,336,364,391,423,444,449,454,458],{"title":41,"path":329,"stem":330,"icon":112},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":332,"path":333,"stem":334,"icon":335},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":337,"icon":338,"path":339,"stem":340,"children":341,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[342,345,350,355,360],{"title":41,"path":343,"stem":344,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":346,"path":347,"stem":348,"icon":349},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":351,"path":352,"stem":353,"icon":354},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":356,"path":357,"stem":358,"icon":359},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":361,"path":362,"stem":363,"icon":142},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":365,"icon":366,"path":367,"stem":368,"children":369,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[370,373,378,383,387],{"title":41,"path":371,"stem":372,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":374,"path":375,"stem":376,"icon":377},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":379,"path":380,"stem":381,"icon":382},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":384,"path":385,"stem":386,"icon":335},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":388,"path":389,"stem":390,"icon":117},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":392,"icon":393,"path":394,"stem":395,"children":396,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[397,400,405,410,415,419],{"title":41,"path":398,"stem":399,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":401,"path":402,"stem":403,"icon":404},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":406,"path":407,"stem":408,"icon":409},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":411,"path":412,"stem":413,"icon":414},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":416,"path":417,"stem":418,"icon":393},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":420,"path":421,"stem":422,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":361,"icon":117,"path":424,"stem":425,"children":426,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[427,430,435,440],{"title":41,"path":428,"stem":429,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":431,"path":432,"stem":433,"icon":434},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":436,"path":437,"stem":438,"icon":439},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":441,"path":442,"stem":443,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":445,"path":446,"stem":447,"icon":448},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":450,"path":451,"stem":452,"icon":453},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":455,"path":456,"stem":457,"icon":439},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":459,"icon":460,"path":461,"stem":462,"children":463,"page":34},"Signals","i-lucide-scan-search","\u002Fuse-cases\u002Fsignals","5.use-cases\u002F7.signals",[464,467,472,477,480],{"title":41,"path":465,"stem":466,"icon":44},"\u002Fuse-cases\u002Fsignals\u002Foverview","5.use-cases\u002F7.signals\u002F01.overview",{"title":468,"path":469,"stem":470,"icon":471},"What You Can Ask","\u002Fuse-cases\u002Fsignals\u002Fask","5.use-cases\u002F7.signals\u002F02.ask","i-lucide-message-circle-question",{"title":473,"path":474,"stem":475,"icon":476},"What It Costs","\u002Fuse-cases\u002Fsignals\u002Fcost","5.use-cases\u002F7.signals\u002F03.cost","i-lucide-coins",{"title":441,"path":478,"stem":479,"icon":84},"\u002Fuse-cases\u002Fsignals\u002Freference","5.use-cases\u002F7.signals\u002F04.reference",{"title":420,"path":481,"stem":482,"icon":483},"\u002Fuse-cases\u002Fsignals\u002Frecipes","5.use-cases\u002F7.signals\u002F05.recipes","i-lucide-lightbulb",{"title":485,"path":486,"stem":487,"children":488,"page":34},"Extend","\u002Fextend","6.extend",[489,493,498,503,507,512,516,520,524,528,533,538],{"title":41,"path":490,"stem":491,"icon":492},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":494,"path":495,"stem":496,"icon":497},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":499,"path":500,"stem":501,"icon":502},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":504,"path":505,"stem":506,"icon":497},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":508,"path":509,"stem":510,"icon":511},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":420,"path":513,"stem":514,"icon":515},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":517,"path":518,"stem":519,"icon":492},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":521,"path":522,"stem":523,"icon":448},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":525,"path":526,"stem":527,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":529,"path":530,"stem":531,"icon":532},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":534,"path":535,"stem":536,"icon":537},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":539,"path":540,"stem":541,"icon":542},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":441,"path":544,"stem":545,"children":546,"page":34},"\u002Freference","7.reference",[547,551,556,559,564,568,573,577],{"title":41,"path":548,"stem":549,"icon":550},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":552,"path":553,"stem":554,"icon":555},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":388,"path":557,"stem":558,"icon":117},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":560,"path":561,"stem":562,"icon":563},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":565,"path":566,"stem":567,"icon":393},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":569,"path":570,"stem":571,"icon":572},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":574,"path":575,"stem":576,"icon":448},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":578,"path":579,"stem":580,"icon":581},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":583,"path":584,"stem":585,"children":586,"page":34},"Compare","\u002Fcompare","8.compare",[587,591,595,599,603],{"title":588,"path":589,"stem":590,"icon":572},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":592,"path":593,"stem":594,"icon":209},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":596,"path":597,"stem":598,"icon":572},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":600,"path":601,"stem":602,"icon":572},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":604,"path":605,"stem":606,"icon":572},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":608,"title":129,"body":609,"description":1357,"extension":1358,"links":1359,"meta":1364,"navigation":1365,"path":428,"seo":1366,"stem":429,"__hash__":1367},"docs\u002F5.use-cases\u002F4.telemetry\u002F01.overview.md",{"type":610,"value":611,"toc":1345},"minimark",[612,633,704,715,880,885,900,971,979,982,986,989,994,1076,1080,1170,1177,1181,1226,1230,1233,1283,1286,1309,1313,1341],[613,614,615,619,620,627,628,632],"p",{},[616,617,618],"code",{},"@evlog\u002Ftelemetry"," brings ",[621,622,626],"a",{"href":623,"rel":624},"https:\u002F\u002Fevlog.dev",[625],"nofollow","evlog","'s wide-event model to tools that run on other people's machines: CLIs, GitHub Actions, dev scripts, and CI jobs. Same philosophy as HTTP logging: ",[629,630,631],"strong",{},"one command execution → one structured event",", not a stream of analytics calls.",[634,635,636,661,675,689],"code-group",{},[637,638,644],"pre",{"className":639,"code":640,"filename":641,"language":642,"meta":643,"style":643},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @evlog\u002Ftelemetry\n","pnpm","bash","",[616,645,646],{"__ignoreMap":643},[647,648,651,654,658],"span",{"class":649,"line":650},"line",1,[647,652,641],{"class":653},"sBMFI",[647,655,657],{"class":656},"sfazB"," add",[647,659,660],{"class":656}," @evlog\u002Ftelemetry\n",[637,662,665],{"className":639,"code":663,"filename":664,"language":642,"meta":643,"style":643},"bun add @evlog\u002Ftelemetry\n","bun",[616,666,667],{"__ignoreMap":643},[647,668,669,671,673],{"class":649,"line":650},[647,670,664],{"class":653},[647,672,657],{"class":656},[647,674,660],{"class":656},[637,676,679],{"className":639,"code":677,"filename":678,"language":642,"meta":643,"style":643},"yarn add @evlog\u002Ftelemetry\n","yarn",[616,680,681],{"__ignoreMap":643},[647,682,683,685,687],{"class":649,"line":650},[647,684,678],{"class":653},[647,686,657],{"class":656},[647,688,660],{"class":656},[637,690,693],{"className":639,"code":691,"filename":692,"language":642,"meta":643,"style":643},"npm install @evlog\u002Ftelemetry\n","npm",[616,694,695],{"__ignoreMap":643},[647,696,697,699,702],{"class":649,"line":650},[647,698,692],{"class":653},[647,700,701],{"class":656}," install",[647,703,660],{"class":656},[613,705,706,707,710,711,714],{},"You get command name, sanitized flags, duration, and outcome automatically. Call ",[616,708,709],{},"telemetry.set()"," only when you have extra counters, numbers and booleans by default. Raw ",[616,712,713],{},"argv"," is never read; disclosure is generated from your runtime config so it cannot drift from what you actually collect.",[716,717,720,723,873],"prompt",{":actions":718,"description":719,"icon":117},"[\"copy\",\"cursor\",\"claude\"]","Add anonymous telemetry to my CLI or script",[613,721,722],{},"Add privacy-respecting telemetry to my CLI, script, or GitHub Action with @evlog\u002Ftelemetry.",[724,725,726,742,749,763,773,791,805,818,824,835,846],"ul",{},[727,728,729,730,733,734,737,738,741],"li",{},"Detect my entrypoint: citty CLI (",[616,731,732],{},"withTelemetry","), standalone script (",[616,735,736],{},"createTelemetry","), or GitHub Actions (",[616,739,740],{},"createGitHubActionsTelemetry",")",[727,743,744,745,748],{},"Install: ",[616,746,747],{},"pnpm add @evlog\u002Ftelemetry"," (or npm\u002Fyarn\u002Fbun)",[727,750,751,752,755,756,759,760],{},"Citty: wrap the root command in ",[616,753,754],{},"withTelemetry()"," in ",[616,757,758],{},"src\u002Findex.ts"," and add ",[616,761,762],{},"defineTelemetryCommands({ name: TOOL })",[727,764,765,766,769,770],{},"Script \u002F migrator: ",[616,767,768],{},"createTelemetry({ name, version })"," and wrap each logical unit with ",[616,771,772],{},"t.run('command', fn)",[727,774,775,776,779,780,783,784,787,788],{},"GitHub Actions: ",[616,777,778],{},"createGitHubActionsTelemetry()",". Only ",[616,781,782],{},"GITHUB_ACTION"," \u002F ",[616,785,786],{},"GITHUB_EVENT_NAME"," are injected into ",[616,789,790],{},"custom",[727,792,793,794,783,797,800,801,804],{},"Declare ",[616,795,796],{},"collect.flags",[616,798,799],{},"collect.fields"," for any string values you need beyond the ",[616,802,803],{},"\"\u003Cset>\""," marker",[727,806,807,808,810,811,813,814],{},"Put your product schema in ",[616,809,790],{}," via ",[616,812,709],{},", see ",[621,815,817],{"href":816},"\u002Fuse-cases\u002Ftelemetry\u002Freference#extending-the-schema","Extending the schema",[727,819,820,821,823],{},"Call ",[616,822,709],{}," for business counters (numbers\u002Fbooleans) inside handlers or helpers on the same async stack",[727,825,826,827,830,831,834],{},"Run ",[616,828,829],{},"generateDisclosure()"," and commit ",[616,832,833],{},"TELEMETRY.md"," beside the tool",[727,836,837,838,841,842,845],{},"Bake an ingestion URL in ",[616,839,840],{},"endpoint"," (or ",[616,843,844],{},"EVLOG_TELEMETRY_ENDPOINT","). The local outbox is a buffer, not the destination",[727,847,848,849,852,853,856,857,860,861,864,865,868,869,872],{},"Ship ",[616,850,851],{},"POST \u002Fapi\u002Ftelemetry\u002Fingest"," on my app: use ",[616,854,855],{},"parseIngestBody()"," from ",[616,858,859],{},"@evlog\u002Ftelemetry\u002Fingest"," with ",[616,862,863],{},"allowedTools"," + ",[616,866,867],{},"allowedCustomKeys",", dedupe on ",[616,870,871],{},"idempotencyKey",", return 204 on success",[613,874,875,876],{},"Docs: ",[621,877,878],{"href":878,"rel":879},"https:\u002F\u002Fwww.evlog.dev\u002Fuse-cases\u002Ftelemetry\u002Foverview",[625],[881,882,884],"h2",{"id":883},"from-cli-to-your-backend","From CLI to your backend",[613,886,887,888,891,892,895,896,899],{},"The disk outbox (",[616,889,890],{},"~\u002F.config\u002F{toolName}\u002Ftelemetry\u002Foutbox.ndjson",") is a ",[629,893,894],{},"reliability buffer",", not where telemetry lives long-term. Each run appends one event locally, then the HTTP drain POSTs the backlog to ",[629,897,898],{},"your"," ingestion endpoint. Short-lived CI jobs and offline machines drain on the next invocation.",[901,902,903,913,924,932,942,952,961],"ol",{},[727,904,905,908,909,912],{},[629,906,907],{},"Run",": ",[616,910,911],{},"my-tool doctor"," executes on the user's machine",[727,914,915,908,918,920,921],{},[629,916,917],{},"Capture",[616,919,618],{}," sanitizes flags, checks consent, and records one ",[616,922,923],{},"RunEvent",[727,925,926,929,930],{},[629,927,928],{},"Buffer",": the event appends to ",[616,931,890],{},[727,933,934,937,938,941],{},[629,935,936],{},"Send",": on flush, POST ",[616,939,940],{},"{ events: RunEvent[] }"," to your ingest URL",[727,943,944,908,947,949,950,741],{},[629,945,946],{},"Validate",[616,948,855],{}," allowlists tools and custom keys (",[621,951,436],{"href":437},[727,953,954,957,958,960],{},[629,955,956],{},"Store",": dedupe on ",[616,959,871],{},", then DB \u002F warehouse \u002F evlog drain",[727,962,963,966,967,970],{},[629,964,965],{},"Ack",": on ",[616,968,969],{},"2xx",", delivered keys are removed from the outbox",[637,972,977],{"className":973,"code":975,"language":976,"meta":643},[974],"language-text","CLI → @evlog\u002Ftelemetry → outbox.ndjson → POST \u002Fingest → validate → store\n","text",[616,978,975],{"__ignoreMap":643},[613,980,981],{},"Nothing is sent until you configure an endpoint and the server returns a success status. Until then, events stay in the outbox (or are purged on opt-out).",[881,983,985],{"id":984},"why-install-it","Why install it",[613,987,988],{},"You can wire anonymous usage telemetry yourself: outbox file, consent flags, flag sanitization, disclosure markdown, ingest validation, first-run notice. Or you add one dependency and get the evlog playbook baked in.",[990,991,993],"h3",{"id":992},"what-you-get-for-28-kb","What you get for ~28 KB",[995,996,997,1008],"table",{},[998,999,1000],"thead",{},[1001,1002,1003,1006],"tr",{},[1004,1005],"th",{},[1004,1007],{},[1009,1010,1011,1028,1043,1063],"tbody",{},[1001,1012,1013,1019],{},[1014,1015,1016],"td",{},[629,1017,1018],{},"Published size",[1014,1020,1021,1022,1024,1025,1027],{},"~28 KB ESM (",[616,1023,618],{},"), ~8.6 KB gzip — standalone, no dependency on ",[616,1026,626],{}," core",[1001,1029,1030,1035],{},[1014,1031,1032],{},[629,1033,1034],{},"Server ingest only",[1014,1036,1037,1039,1040,1042],{},[616,1038,859],{}," ~5 KB (~1.7 KB gzip) — ",[616,1041,855],{}," without pulling citty wiring into your API",[1001,1044,1045,1050],{},[1014,1046,1047],{},[629,1048,1049],{},"Runtime deps",[1014,1051,1052,864,1055,1058,1059,1062],{},[616,1053,1054],{},"citty",[616,1056,1057],{},"std-env"," only — both ",[616,1060,1061],{},"sideEffects: false",", tree-shakeable ESM",[1001,1064,1065,1070],{},[1014,1066,1067],{},[629,1068,1069],{},"Node",[1014,1071,1072,1073,1075],{},"18+ · ESM · ",[616,1074,1061],{}," on the package",[990,1077,1079],{"id":1078},"fits-wherever-your-code-runs","Fits wherever your code runs",[995,1081,1082,1095],{},[998,1083,1084],{},[1001,1085,1086,1089,1092],{},[1004,1087,1088],{},"Surface",[1004,1090,1091],{},"Entry",[1004,1093,1094],{},"Lines of integration",[1009,1096,1097,1115,1133,1154],{},[1001,1098,1099,1104,1109],{},[1014,1100,1101],{},[629,1102,1103],{},"citty CLI",[1014,1105,1106,1108],{},[616,1107,754],{}," on the root command",[1014,1110,1111,1112],{},"One wrapper + optional ",[616,1113,1114],{},"defineTelemetryCommands()",[1001,1116,1117,1122,1130],{},[1014,1118,1119],{},[629,1120,1121],{},"Script \u002F migrator",[1014,1123,1124,864,1127],{},[616,1125,1126],{},"createTelemetry()",[616,1128,1129],{},"t.run()",[1014,1131,1132],{},"Wrap each logical run",[1001,1134,1135,1140,1144],{},[1014,1136,1137],{},[629,1138,1139],{},"GitHub Actions",[1014,1141,1142],{},[616,1143,778],{},[1014,1145,1146,1147,783,1150,1153],{},"Same as script; ",[616,1148,1149],{},"ghaAction",[616,1151,1152],{},"ghaEvent"," auto-injected",[1001,1155,1156,1161,1167],{},[1014,1157,1158],{},[629,1159,1160],{},"Your API (ingest)",[1014,1162,1163,856,1165],{},[616,1164,855],{},[616,1166,859],{},[1014,1168,1169],{},"One validator + one POST route",[613,1171,1172,1173,1176],{},"No framework lock-in. No PostHog \u002F Segment \u002F custom analytics SDK. No second schema to maintain, since disclosure is generated from the same ",[616,1174,1175],{},"collect"," config the CLI uses at runtime.",[990,1178,1180],{"id":1179},"what-you-skip-building","What you skip building",[724,1182,1183,1188,1197,1200,1208,1211,1217,1220],{},[727,1184,1185,1186,741],{},"Privacy-safe flag capture (never reads raw ",[616,1187,713],{},[727,1189,1190,783,1193,1196],{},[616,1191,1192],{},"DO_NOT_TRACK",[616,1194,1195],{},"EVLOG_TELEMETRY"," \u002F persisted opt-out with outbox purge",[727,1198,1199],{},"Disk outbox with lockfile, stale-lock recovery, and backlog drain",[727,1201,1202,1203,864,1205,741],{},"Auto-generated disclosure (",[616,1204,833],{},[616,1206,1207],{},"telemetry status",[727,1209,1210],{},"First-run notice with opt-out instructions",[727,1212,1213,1214,1216],{},"Typed ",[616,1215,709],{}," with allowlisted string fields",[727,1218,1219],{},"Server-side ingest validation aligned with the CLI envelope",[727,1221,1222,1223],{},"Hard guarantee: ",[629,1224,1225],{},"telemetry never throws, never blocks exit",[990,1227,1229],{"id":1228},"the-payoff","The payoff",[613,1231,1232],{},"Once ingest is live you can answer product questions that CLI authors usually guess at:",[724,1234,1235,1246,1257,1264,1271],{},[727,1236,1237,1238,1240,1241,1240,1244,741],{},"Which commands are actually used (",[616,1239,124],{}," vs ",[616,1242,1243],{},"sync",[616,1245,1207],{},[727,1247,1248,1249,1252,1253,1256],{},"Where runs fail (",[616,1250,1251],{},"outcome",", ",[616,1254,1255],{},"errorCode",", version breakdown)",[727,1258,1259,1260,1263],{},"How long operations take (",[616,1261,1262],{},"durationMs"," per command)",[727,1265,1266,1267,1270],{},"Which versions are still in the wild (",[616,1268,1269],{},"tool.version"," on every event)",[727,1272,1273,1274,1252,1277,1252,1280,741],{},"Whether CI or local dev dominates (",[616,1275,1276],{},"env.ci",[616,1278,1279],{},"env.agent",[616,1281,1282],{},"env.tty",[613,1284,1285],{},"All from one wide event per run, the same mental model as evlog on the server, without bolting a browser analytics stack onto a terminal tool.",[1287,1288,1291,1292,908,1299,1252,1302,1305,1306,1308],"callout",{"color":1289,"icon":1290},"neutral","i-lucide-package","Try it locally: ",[621,1293,1296],{"href":1294,"rel":1295},"https:\u002F\u002Fgithub.com\u002Fevloghq\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Ftelemetry-playground",[625],[616,1297,1298],{},"examples\u002Ftelemetry-playground",[616,1300,1301],{},"pnpm run cli -- doctor",[616,1303,1304],{},"EVLOG_TELEMETRY_DEBUG=1"," to inspect payloads, ",[616,1307,1207],{}," for disclosure.",[881,1310,1312],{"id":1311},"see-also","See also",[724,1314,1315,1320,1325,1330,1336],{},[727,1316,1317,1319],{},[621,1318,431],{"href":432},": citty, scripts, GitHub Actions, delivery config",[727,1321,1322,1324],{},[621,1323,436],{"href":437},": server endpoint, validation, storage",[727,1326,1327,1329],{},[621,1328,441],{"href":442},": envelope, schema extensions, disclosure, consent",[727,1331,1332,1335],{},[621,1333,1334],{"href":398},"Audit",": wide events for security-sensitive actions",[727,1337,1338,1340],{},[621,1339,539],{"href":540},": forward ingested events into Axiom, Datadog, OTLP, or a custom store",[1342,1343,1344],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}",{"title":643,"searchDepth":1346,"depth":1346,"links":1347},2,[1348,1349,1356],{"id":883,"depth":1346,"text":884},{"id":984,"depth":1346,"text":985,"children":1350},[1351,1353,1354,1355],{"id":992,"depth":1352,"text":993},3,{"id":1078,"depth":1352,"text":1079},{"id":1179,"depth":1352,"text":1180},{"id":1228,"depth":1352,"text":1229},{"id":1311,"depth":1346,"text":1312},"One event per run for CLIs and automation, with privacy-safe flags, consent, an outbox, and disclosure generated from the same config.","md",[1360,1362,1363],{"label":431,"icon":434,"to":432,"color":1289,"variant":1361},"subtle",{"label":436,"icon":439,"to":437,"color":1289,"variant":1361},{"label":441,"icon":84,"to":442,"color":1289,"variant":1361},{},{"title":41,"icon":44},{"title":129,"description":1357},"Gb7FHqy5yh1KpnsU8Ghkee_rw-LOn-NRxW1nZ6xcYk8",[1369,1371],{"title":420,"path":421,"stem":422,"description":1370,"icon":84,"children":-1},"File system, Axiom, and Postgres recipes for audit logs, plus mockAudit for tests and the full API reference.",{"title":431,"path":432,"stem":433,"description":1372,"icon":434,"children":-1},"Wire @evlog\u002Ftelemetry into citty CLIs, standalone scripts, and GitHub Actions — delivery config, automatic flag capture, telemetry.set(), and debug mode.",1791444530532]