[{"data":1,"prerenderedAt":3542},["ShallowReactive",2],{"navigation_docs":3,"-extend-diagnostics-channel":607,"-extend-diagnostics-channel-surround":3537},[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":609,"body":610,"description":3525,"extension":3526,"links":3527,"meta":3533,"navigation":3534,"path":505,"seo":3535,"stem":506,"__hash__":3536},"docs\u002F6.extend\u002F11.diagnostics-channel.md","Diagnostics Channel",{"type":611,"value":612,"toc":3513},"minimark",[613,635,640,651,680,687,691,694,755,763,1672,1687,1698,1702,1705,1934,1948,1951,2141,2151,2155,2158,2444,2466,2479,2486,2490,2495,2501,2729,2746,2751,2755,2758,3155,3161,3164,3175,3403,3424,3428,3435,3503,3509],[614,615,616,626,627,630,631,634],"p",{},[617,618,622],"a",{"href":619,"rel":620},"https:\u002F\u002Fnodejs.org\u002Fapi\u002Fdiagnostics_channel.html",[621],"nofollow",[623,624,625],"code",{},"node:diagnostics_channel"," is the runtime's built-in pub\u002Fsub for instrumentation. evlog can publish every wide event on the ",[623,628,629],{},"evlog.event"," channel, so a consumer subscribes by channel name alone: no evlog import, no entry in ",[623,632,633],{},"initLogger()",".",[636,637,639],"h2",{"id":638},"what-its-for","What it's for",[614,641,642,643,646,647,650],{},"Two things you cannot do with a ",[617,644,645],{"href":518},"plugin"," or a ",[617,648,649],{"href":535},"drain",":",[652,653,654,665],"ul",{},[655,656,657,661,662,664],"li",{},[658,659,660],"strong",{},"Ship an evlog integration from a package that does not depend on evlog."," A subscriber only needs the channel name, so a vendor SDK, an internal shared library, or an APM agent can consume wide events without a peer dependency, a version constraint, or a line in your ",[623,663,633],{}," call.",[655,666,667,670,671,675,676,679],{},[658,668,669],{},"Get events out of a Cloudflare Worker without a drain."," Workers forwards every channel message to a ",[617,672,674],{"href":673},"#cloudflare-workers","Tail Worker",", which runs after the response with its own CPU budget, no ",[623,677,678],{},"waitUntil",", no drain competing with your request.",[614,681,682,683,634],{},"For everything else (batching, retry, adding fields, fanning out to several in-process consumers), a plugin or a drain is the better tool. There is a ",[617,684,686],{"href":685},"#when-a-plugin-is-the-better-tool","comparison at the bottom of this page",[636,688,690],{"id":689},"enabling-it","Enabling it",[614,692,693],{},"It is off by default. Turn it on once, at startup:",[695,696,701],"pre",{"className":697,"code":698,"language":699,"meta":700,"style":700},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { enableDiagnosticsChannel } from 'evlog\u002Fdiagnostics'\n\nawait enableDiagnosticsChannel()\n","typescript","",[623,702,703,736,743],{"__ignoreMap":700},[704,705,708,712,716,720,723,726,729,733],"span",{"class":706,"line":707},"line",1,[704,709,711],{"class":710},"s7zQu","import",[704,713,715],{"class":714},"sMK4o"," {",[704,717,719],{"class":718},"sTEyZ"," enableDiagnosticsChannel",[704,721,722],{"class":714}," }",[704,724,725],{"class":710}," from",[704,727,728],{"class":714}," '",[704,730,732],{"class":731},"sfazB","evlog\u002Fdiagnostics",[704,734,735],{"class":714},"'\n",[704,737,739],{"class":706,"line":738},2,[704,740,742],{"emptyLinePlaceholder":741},true,"\n",[704,744,746,749,752],{"class":706,"line":745},3,[704,747,748],{"class":710},"await",[704,750,719],{"class":751},"s2Zo4",[704,753,754],{"class":718},"()\n",[614,756,757,758,762],{},"The call takes no options and is the same on every framework. Only ",[759,760,761],"em",{},"where"," your app runs startup code differs:",[764,765,766,841,921,1162,1246,1373,1581],"framework-tabs",{},[695,767,770],{"className":697,"code":768,"filename":245,"language":699,"meta":769,"style":700},"import { enableDiagnosticsChannel } from 'evlog\u002Fdiagnostics'\n\nexport default defineNitroPlugin(async () => {\n  await enableDiagnosticsChannel()\n})\n","server\u002Fplugins\u002Fevlog-diagnostics.ts",[623,771,772,790,794,821,832],{"__ignoreMap":700},[704,773,774,776,778,780,782,784,786,788],{"class":706,"line":707},[704,775,711],{"class":710},[704,777,715],{"class":714},[704,779,719],{"class":718},[704,781,722],{"class":714},[704,783,725],{"class":710},[704,785,728],{"class":714},[704,787,732],{"class":731},[704,789,735],{"class":714},[704,791,792],{"class":706,"line":738},[704,793,742],{"emptyLinePlaceholder":741},[704,795,796,799,802,805,808,812,815,818],{"class":706,"line":745},[704,797,798],{"class":710},"export",[704,800,801],{"class":710}," default",[704,803,804],{"class":751}," defineNitroPlugin",[704,806,807],{"class":718},"(",[704,809,811],{"class":810},"spNyl","async",[704,813,814],{"class":714}," ()",[704,816,817],{"class":810}," =>",[704,819,820],{"class":714}," {\n",[704,822,824,827,829],{"class":706,"line":823},4,[704,825,826],{"class":710},"  await",[704,828,719],{"class":751},[704,830,754],{"class":831},"swJcz",[704,833,835,838],{"class":706,"line":834},5,[704,836,837],{"class":714},"}",[704,839,840],{"class":718},")\n",[695,842,844],{"className":697,"code":843,"filename":260,"language":699,"meta":769,"style":700},"import { definePlugin } from 'nitro'\nimport { enableDiagnosticsChannel } from 'evlog\u002Fdiagnostics'\n\nexport default definePlugin(async () => {\n  await enableDiagnosticsChannel()\n})\n",[623,845,846,866,884,888,906,914],{"__ignoreMap":700},[704,847,848,850,852,855,857,859,861,864],{"class":706,"line":707},[704,849,711],{"class":710},[704,851,715],{"class":714},[704,853,854],{"class":718}," definePlugin",[704,856,722],{"class":714},[704,858,725],{"class":710},[704,860,728],{"class":714},[704,862,863],{"class":731},"nitro",[704,865,735],{"class":714},[704,867,868,870,872,874,876,878,880,882],{"class":706,"line":738},[704,869,711],{"class":710},[704,871,715],{"class":714},[704,873,719],{"class":718},[704,875,722],{"class":714},[704,877,725],{"class":710},[704,879,728],{"class":714},[704,881,732],{"class":731},[704,883,735],{"class":714},[704,885,886],{"class":706,"line":745},[704,887,742],{"emptyLinePlaceholder":741},[704,889,890,892,894,896,898,900,902,904],{"class":706,"line":823},[704,891,798],{"class":710},[704,893,801],{"class":710},[704,895,854],{"class":751},[704,897,807],{"class":718},[704,899,811],{"class":810},[704,901,814],{"class":714},[704,903,817],{"class":810},[704,905,820],{"class":714},[704,907,908,910,912],{"class":706,"line":834},[704,909,826],{"class":710},[704,911,719],{"class":751},[704,913,754],{"class":831},[704,915,917,919],{"class":706,"line":916},6,[704,918,837],{"class":714},[704,920,840],{"class":718},[695,922,925],{"className":697,"code":923,"filename":250,"language":699,"meta":924,"style":700},"import { defineNodeInstrumentation } from 'evlog\u002Fnext\u002Finstrumentation'\n\nexport const { register, onRequestError } = defineNodeInstrumentation(async () => {\n  const { createInstrumentation } = await import('evlog\u002Fnext\u002Finstrumentation\u002Fcreate')\n  const { enableDiagnosticsChannel } = await import('evlog\u002Fdiagnostics')\n  const { register: evlogRegister, onRequestError } = createInstrumentation({ service: 'my-app' })\n\n  return {\n    async register() {\n      await evlogRegister()\n      await enableDiagnosticsChannel()\n    },\n    onRequestError,\n  }\n})\n","instrumentation.ts",[623,926,927,947,951,986,1018,1044,1089,1094,1102,1115,1125,1134,1140,1149,1155],{"__ignoreMap":700},[704,928,929,931,933,936,938,940,942,945],{"class":706,"line":707},[704,930,711],{"class":710},[704,932,715],{"class":714},[704,934,935],{"class":718}," defineNodeInstrumentation",[704,937,722],{"class":714},[704,939,725],{"class":710},[704,941,728],{"class":714},[704,943,944],{"class":731},"evlog\u002Fnext\u002Finstrumentation",[704,946,735],{"class":714},[704,948,949],{"class":706,"line":738},[704,950,742],{"emptyLinePlaceholder":741},[704,952,953,955,958,960,963,966,969,971,974,976,978,980,982,984],{"class":706,"line":745},[704,954,798],{"class":710},[704,956,957],{"class":810}," const",[704,959,715],{"class":714},[704,961,962],{"class":718}," register",[704,964,965],{"class":714},",",[704,967,968],{"class":718}," onRequestError ",[704,970,837],{"class":714},[704,972,973],{"class":714}," =",[704,975,935],{"class":751},[704,977,807],{"class":718},[704,979,811],{"class":810},[704,981,814],{"class":714},[704,983,817],{"class":810},[704,985,820],{"class":714},[704,987,988,991,993,996,998,1000,1003,1006,1008,1011,1014,1016],{"class":706,"line":823},[704,989,990],{"class":810},"  const",[704,992,715],{"class":714},[704,994,995],{"class":718}," createInstrumentation",[704,997,722],{"class":714},[704,999,973],{"class":714},[704,1001,1002],{"class":710}," await",[704,1004,1005],{"class":714}," import",[704,1007,807],{"class":831},[704,1009,1010],{"class":714},"'",[704,1012,1013],{"class":731},"evlog\u002Fnext\u002Finstrumentation\u002Fcreate",[704,1015,1010],{"class":714},[704,1017,840],{"class":831},[704,1019,1020,1022,1024,1026,1028,1030,1032,1034,1036,1038,1040,1042],{"class":706,"line":834},[704,1021,990],{"class":810},[704,1023,715],{"class":714},[704,1025,719],{"class":718},[704,1027,722],{"class":714},[704,1029,973],{"class":714},[704,1031,1002],{"class":710},[704,1033,1005],{"class":714},[704,1035,807],{"class":831},[704,1037,1010],{"class":714},[704,1039,732],{"class":731},[704,1041,1010],{"class":714},[704,1043,840],{"class":831},[704,1045,1046,1048,1050,1052,1054,1057,1059,1062,1064,1066,1068,1070,1073,1076,1078,1080,1083,1085,1087],{"class":706,"line":916},[704,1047,990],{"class":810},[704,1049,715],{"class":714},[704,1051,962],{"class":831},[704,1053,650],{"class":714},[704,1055,1056],{"class":718}," evlogRegister",[704,1058,965],{"class":714},[704,1060,1061],{"class":718}," onRequestError",[704,1063,722],{"class":714},[704,1065,973],{"class":714},[704,1067,995],{"class":751},[704,1069,807],{"class":831},[704,1071,1072],{"class":714},"{",[704,1074,1075],{"class":831}," service",[704,1077,650],{"class":714},[704,1079,728],{"class":714},[704,1081,1082],{"class":731},"my-app",[704,1084,1010],{"class":714},[704,1086,722],{"class":714},[704,1088,840],{"class":831},[704,1090,1092],{"class":706,"line":1091},7,[704,1093,742],{"emptyLinePlaceholder":741},[704,1095,1097,1100],{"class":706,"line":1096},8,[704,1098,1099],{"class":710},"  return",[704,1101,820],{"class":714},[704,1103,1105,1108,1110,1113],{"class":706,"line":1104},9,[704,1106,1107],{"class":810},"    async",[704,1109,962],{"class":831},[704,1111,1112],{"class":714},"()",[704,1114,820],{"class":714},[704,1116,1118,1121,1123],{"class":706,"line":1117},10,[704,1119,1120],{"class":710},"      await",[704,1122,1056],{"class":751},[704,1124,754],{"class":831},[704,1126,1128,1130,1132],{"class":706,"line":1127},11,[704,1129,1120],{"class":710},[704,1131,719],{"class":751},[704,1133,754],{"class":831},[704,1135,1137],{"class":706,"line":1136},12,[704,1138,1139],{"class":714},"    },\n",[704,1141,1143,1146],{"class":706,"line":1142},13,[704,1144,1145],{"class":718},"    onRequestError",[704,1147,1148],{"class":714},",\n",[704,1150,1152],{"class":706,"line":1151},14,[704,1153,1154],{"class":714},"  }\n",[704,1156,1158,1160],{"class":706,"line":1157},15,[704,1159,837],{"class":714},[704,1161,840],{"class":718},[695,1163,1166],{"className":697,"code":1164,"filename":255,"language":699,"meta":1165,"style":700},"import { createEvlogHooks } from 'evlog\u002Fsveltekit'\nimport { enableDiagnosticsChannel } from 'evlog\u002Fdiagnostics'\n\nawait enableDiagnosticsChannel()\n\nexport const { handle, handleError } = createEvlogHooks()\n","src\u002Fhooks.server.ts",[623,1167,1168,1188,1206,1210,1218,1222],{"__ignoreMap":700},[704,1169,1170,1172,1174,1177,1179,1181,1183,1186],{"class":706,"line":707},[704,1171,711],{"class":710},[704,1173,715],{"class":714},[704,1175,1176],{"class":718}," createEvlogHooks",[704,1178,722],{"class":714},[704,1180,725],{"class":710},[704,1182,728],{"class":714},[704,1184,1185],{"class":731},"evlog\u002Fsveltekit",[704,1187,735],{"class":714},[704,1189,1190,1192,1194,1196,1198,1200,1202,1204],{"class":706,"line":738},[704,1191,711],{"class":710},[704,1193,715],{"class":714},[704,1195,719],{"class":718},[704,1197,722],{"class":714},[704,1199,725],{"class":710},[704,1201,728],{"class":714},[704,1203,732],{"class":731},[704,1205,735],{"class":714},[704,1207,1208],{"class":706,"line":745},[704,1209,742],{"emptyLinePlaceholder":741},[704,1211,1212,1214,1216],{"class":706,"line":823},[704,1213,748],{"class":710},[704,1215,719],{"class":751},[704,1217,754],{"class":718},[704,1219,1220],{"class":706,"line":834},[704,1221,742],{"emptyLinePlaceholder":741},[704,1223,1224,1226,1228,1230,1233,1235,1238,1240,1242,1244],{"class":706,"line":916},[704,1225,798],{"class":710},[704,1227,957],{"class":810},[704,1229,715],{"class":714},[704,1231,1232],{"class":718}," handle",[704,1234,965],{"class":714},[704,1236,1237],{"class":718}," handleError ",[704,1239,837],{"class":714},[704,1241,973],{"class":714},[704,1243,1176],{"class":751},[704,1245,754],{"class":718},[695,1247,1250],{"className":697,"code":1248,"filename":280,"language":699,"meta":1249,"style":700},"\u002F\u002F Same shape for Express, Fastify, Elysia, NestJS and oRPC:\n\u002F\u002F enable once in the server entry, before the app starts serving.\nimport { Hono } from 'hono'\nimport { evlog } from 'evlog\u002Fhono'\nimport { enableDiagnosticsChannel } from 'evlog\u002Fdiagnostics'\n\nawait enableDiagnosticsChannel()\n\nconst app = new Hono()\napp.use(evlog())\n","src\u002Findex.ts",[623,1251,1252,1258,1263,1283,1303,1321,1325,1333,1337,1355],{"__ignoreMap":700},[704,1253,1254],{"class":706,"line":707},[704,1255,1257],{"class":1256},"sHwdD","\u002F\u002F Same shape for Express, Fastify, Elysia, NestJS and oRPC:\n",[704,1259,1260],{"class":706,"line":738},[704,1261,1262],{"class":1256},"\u002F\u002F enable once in the server entry, before the app starts serving.\n",[704,1264,1265,1267,1269,1272,1274,1276,1278,1281],{"class":706,"line":745},[704,1266,711],{"class":710},[704,1268,715],{"class":714},[704,1270,1271],{"class":718}," Hono",[704,1273,722],{"class":714},[704,1275,725],{"class":710},[704,1277,728],{"class":714},[704,1279,1280],{"class":731},"hono",[704,1282,735],{"class":714},[704,1284,1285,1287,1289,1292,1294,1296,1298,1301],{"class":706,"line":823},[704,1286,711],{"class":710},[704,1288,715],{"class":714},[704,1290,1291],{"class":718}," evlog",[704,1293,722],{"class":714},[704,1295,725],{"class":710},[704,1297,728],{"class":714},[704,1299,1300],{"class":731},"evlog\u002Fhono",[704,1302,735],{"class":714},[704,1304,1305,1307,1309,1311,1313,1315,1317,1319],{"class":706,"line":834},[704,1306,711],{"class":710},[704,1308,715],{"class":714},[704,1310,719],{"class":718},[704,1312,722],{"class":714},[704,1314,725],{"class":710},[704,1316,728],{"class":714},[704,1318,732],{"class":731},[704,1320,735],{"class":714},[704,1322,1323],{"class":706,"line":916},[704,1324,742],{"emptyLinePlaceholder":741},[704,1326,1327,1329,1331],{"class":706,"line":1091},[704,1328,748],{"class":710},[704,1330,719],{"class":751},[704,1332,754],{"class":718},[704,1334,1335],{"class":706,"line":1096},[704,1336,742],{"emptyLinePlaceholder":741},[704,1338,1339,1342,1345,1348,1351,1353],{"class":706,"line":1104},[704,1340,1341],{"class":810},"const",[704,1343,1344],{"class":718}," app ",[704,1346,1347],{"class":714},"=",[704,1349,1350],{"class":714}," new",[704,1352,1271],{"class":751},[704,1354,754],{"class":718},[704,1356,1357,1360,1362,1365,1367,1370],{"class":706,"line":1117},[704,1358,1359],{"class":718},"app",[704,1361,634],{"class":714},[704,1363,1364],{"class":751},"use",[704,1366,807],{"class":718},[704,1368,1369],{"class":751},"evlog",[704,1371,1372],{"class":718},"())\n",[695,1374,1377],{"className":697,"code":1375,"filename":300,"language":699,"meta":1376,"style":700},"\u002F\u002F Needs the nodejs_compat flag\nimport { initWorkersLogger, withEvlog } from 'evlog\u002Fworkers'\nimport { enableDiagnosticsChannel } from 'evlog\u002Fdiagnostics'\n\ninitWorkersLogger({ env: { service: 'my-worker' } })\nawait enableDiagnosticsChannel()\n\nexport default withEvlog(async (request, env, ctx, log) => {\n  log.set({ action: 'handle_request' })\n  return Response.json({ ok: true })\n})\n","src\u002Fworker.ts",[623,1378,1379,1384,1409,1427,1431,1464,1472,1476,1516,1546,1575],{"__ignoreMap":700},[704,1380,1381],{"class":706,"line":707},[704,1382,1383],{"class":1256},"\u002F\u002F Needs the nodejs_compat flag\n",[704,1385,1386,1388,1390,1393,1395,1398,1400,1402,1404,1407],{"class":706,"line":738},[704,1387,711],{"class":710},[704,1389,715],{"class":714},[704,1391,1392],{"class":718}," initWorkersLogger",[704,1394,965],{"class":714},[704,1396,1397],{"class":718}," withEvlog",[704,1399,722],{"class":714},[704,1401,725],{"class":710},[704,1403,728],{"class":714},[704,1405,1406],{"class":731},"evlog\u002Fworkers",[704,1408,735],{"class":714},[704,1410,1411,1413,1415,1417,1419,1421,1423,1425],{"class":706,"line":745},[704,1412,711],{"class":710},[704,1414,715],{"class":714},[704,1416,719],{"class":718},[704,1418,722],{"class":714},[704,1420,725],{"class":710},[704,1422,728],{"class":714},[704,1424,732],{"class":731},[704,1426,735],{"class":714},[704,1428,1429],{"class":706,"line":823},[704,1430,742],{"emptyLinePlaceholder":741},[704,1432,1433,1436,1438,1440,1443,1445,1447,1449,1451,1453,1456,1458,1460,1462],{"class":706,"line":834},[704,1434,1435],{"class":751},"initWorkersLogger",[704,1437,807],{"class":718},[704,1439,1072],{"class":714},[704,1441,1442],{"class":831}," env",[704,1444,650],{"class":714},[704,1446,715],{"class":714},[704,1448,1075],{"class":831},[704,1450,650],{"class":714},[704,1452,728],{"class":714},[704,1454,1455],{"class":731},"my-worker",[704,1457,1010],{"class":714},[704,1459,722],{"class":714},[704,1461,722],{"class":714},[704,1463,840],{"class":718},[704,1465,1466,1468,1470],{"class":706,"line":916},[704,1467,748],{"class":710},[704,1469,719],{"class":751},[704,1471,754],{"class":718},[704,1473,1474],{"class":706,"line":1091},[704,1475,742],{"emptyLinePlaceholder":741},[704,1477,1478,1480,1482,1484,1486,1488,1491,1495,1497,1499,1501,1504,1506,1509,1512,1514],{"class":706,"line":1096},[704,1479,798],{"class":710},[704,1481,801],{"class":710},[704,1483,1397],{"class":751},[704,1485,807],{"class":718},[704,1487,811],{"class":810},[704,1489,1490],{"class":714}," (",[704,1492,1494],{"class":1493},"sHdIc","request",[704,1496,965],{"class":714},[704,1498,1442],{"class":1493},[704,1500,965],{"class":714},[704,1502,1503],{"class":1493}," ctx",[704,1505,965],{"class":714},[704,1507,1508],{"class":1493}," log",[704,1510,1511],{"class":714},")",[704,1513,817],{"class":810},[704,1515,820],{"class":714},[704,1517,1518,1521,1523,1526,1528,1530,1533,1535,1537,1540,1542,1544],{"class":706,"line":1104},[704,1519,1520],{"class":718},"  log",[704,1522,634],{"class":714},[704,1524,1525],{"class":751},"set",[704,1527,807],{"class":831},[704,1529,1072],{"class":714},[704,1531,1532],{"class":831}," action",[704,1534,650],{"class":714},[704,1536,728],{"class":714},[704,1538,1539],{"class":731},"handle_request",[704,1541,1010],{"class":714},[704,1543,722],{"class":714},[704,1545,840],{"class":831},[704,1547,1548,1550,1553,1555,1558,1560,1562,1565,1567,1571,1573],{"class":706,"line":1117},[704,1549,1099],{"class":710},[704,1551,1552],{"class":718}," Response",[704,1554,634],{"class":714},[704,1556,1557],{"class":751},"json",[704,1559,807],{"class":831},[704,1561,1072],{"class":714},[704,1563,1564],{"class":831}," ok",[704,1566,650],{"class":714},[704,1568,1570],{"class":1569},"sfNiH"," true",[704,1572,722],{"class":714},[704,1574,840],{"class":831},[704,1576,1577,1579],{"class":706,"line":1127},[704,1578,837],{"class":714},[704,1580,840],{"class":718},[695,1582,1584],{"className":697,"code":1583,"filename":305,"language":699,"meta":700,"style":700},"\u002F\u002F Any Node, Bun or Deno entry point\nimport { initLogger } from 'evlog'\nimport { enableDiagnosticsChannel } from 'evlog\u002Fdiagnostics'\n\ninitLogger({ env: { service: 'worker' } })\nawait enableDiagnosticsChannel()\n",[623,1585,1586,1591,1610,1628,1632,1664],{"__ignoreMap":700},[704,1587,1588],{"class":706,"line":707},[704,1589,1590],{"class":1256},"\u002F\u002F Any Node, Bun or Deno entry point\n",[704,1592,1593,1595,1597,1600,1602,1604,1606,1608],{"class":706,"line":738},[704,1594,711],{"class":710},[704,1596,715],{"class":714},[704,1598,1599],{"class":718}," initLogger",[704,1601,722],{"class":714},[704,1603,725],{"class":710},[704,1605,728],{"class":714},[704,1607,1369],{"class":731},[704,1609,735],{"class":714},[704,1611,1612,1614,1616,1618,1620,1622,1624,1626],{"class":706,"line":745},[704,1613,711],{"class":710},[704,1615,715],{"class":714},[704,1617,719],{"class":718},[704,1619,722],{"class":714},[704,1621,725],{"class":710},[704,1623,728],{"class":714},[704,1625,732],{"class":731},[704,1627,735],{"class":714},[704,1629,1630],{"class":706,"line":823},[704,1631,742],{"emptyLinePlaceholder":741},[704,1633,1634,1637,1639,1641,1643,1645,1647,1649,1651,1653,1656,1658,1660,1662],{"class":706,"line":834},[704,1635,1636],{"class":751},"initLogger",[704,1638,807],{"class":718},[704,1640,1072],{"class":714},[704,1642,1442],{"class":831},[704,1644,650],{"class":714},[704,1646,715],{"class":714},[704,1648,1075],{"class":831},[704,1650,650],{"class":714},[704,1652,728],{"class":714},[704,1654,1655],{"class":731},"worker",[704,1657,1010],{"class":714},[704,1659,722],{"class":714},[704,1661,722],{"class":714},[704,1663,840],{"class":718},[704,1665,1666,1668,1670],{"class":706,"line":916},[704,1667,748],{"class":710},[704,1669,719],{"class":751},[704,1671,754],{"class":718},[614,1673,1674,1677,1678,1680,1681,1683,1684,1686],{},[623,1675,1676],{},"enableDiagnosticsChannel()"," is async because it loads ",[623,1679,625],{}," lazily, which is what keeps the built-in out of the main bundle for Convex, workerd and other non-Node targets. Events emitted before the promise settles are not published, so call it at startup rather than inside a request. Frameworks whose entry point cannot use top-level ",[623,1682,748],{}," should call it from the same place they call ",[623,1685,633],{},", and await it there.",[1688,1689,1691,1692,1694,1695,1697],"callout",{"color":1690,"icon":13},"info","This is an observation side channel, not a transport. Subscribers run synchronously and are not awaited: no batching, no retry, no ",[623,1693,678],{},". For delivery to a backend, use a ",[617,1696,649],{"href":535},"; both see the same event.",[636,1699,1701],{"id":1700},"subscribing","Subscribing",[614,1703,1704],{},"The point of the channel is that a consumer needs nothing from evlog but the channel name:",[695,1706,1709],{"className":697,"code":1707,"filename":1708,"language":699,"meta":700,"style":700},"import { channel } from 'node:diagnostics_channel'\n\n\u002F** The published message. Declared locally so this file needs no evlog import. *\u002F\ntype EvlogMessage = { event: Record\u003Cstring, unknown> & { level: string; service: string } }\n\nchannel('evlog.event').subscribe((message) => {\n  const { event } = message as EvlogMessage\n  if (event.level === 'error') metrics.increment('errors', { path: String(event.path ?? 'unknown') })\n})\n","metrics.ts",[623,1710,1711,1730,1734,1739,1801,1805,1837,1858,1928],{"__ignoreMap":700},[704,1712,1713,1715,1717,1720,1722,1724,1726,1728],{"class":706,"line":707},[704,1714,711],{"class":710},[704,1716,715],{"class":714},[704,1718,1719],{"class":718}," channel",[704,1721,722],{"class":714},[704,1723,725],{"class":710},[704,1725,728],{"class":714},[704,1727,625],{"class":731},[704,1729,735],{"class":714},[704,1731,1732],{"class":706,"line":738},[704,1733,742],{"emptyLinePlaceholder":741},[704,1735,1736],{"class":706,"line":745},[704,1737,1738],{"class":1256},"\u002F** The published message. Declared locally so this file needs no evlog import. *\u002F\n",[704,1740,1741,1744,1748,1750,1752,1755,1757,1760,1763,1766,1768,1771,1774,1777,1779,1782,1784,1787,1790,1792,1794,1796,1798],{"class":706,"line":823},[704,1742,1743],{"class":810},"type",[704,1745,1747],{"class":1746},"sBMFI"," EvlogMessage",[704,1749,973],{"class":714},[704,1751,715],{"class":714},[704,1753,1754],{"class":831}," event",[704,1756,650],{"class":714},[704,1758,1759],{"class":1746}," Record",[704,1761,1762],{"class":714},"\u003C",[704,1764,1765],{"class":1746},"string",[704,1767,965],{"class":714},[704,1769,1770],{"class":1746}," unknown",[704,1772,1773],{"class":714},">",[704,1775,1776],{"class":714}," &",[704,1778,715],{"class":714},[704,1780,1781],{"class":831}," level",[704,1783,650],{"class":714},[704,1785,1786],{"class":1746}," string",[704,1788,1789],{"class":714},";",[704,1791,1075],{"class":831},[704,1793,650],{"class":714},[704,1795,1786],{"class":1746},[704,1797,722],{"class":714},[704,1799,1800],{"class":714}," }\n",[704,1802,1803],{"class":706,"line":834},[704,1804,742],{"emptyLinePlaceholder":741},[704,1806,1807,1810,1812,1814,1816,1818,1821,1824,1826,1828,1831,1833,1835],{"class":706,"line":916},[704,1808,1809],{"class":1746},"channel",[704,1811,807],{"class":718},[704,1813,1010],{"class":714},[704,1815,629],{"class":731},[704,1817,1010],{"class":714},[704,1819,1820],{"class":718},").",[704,1822,1823],{"class":1746},"subscribe",[704,1825,807],{"class":718},[704,1827,807],{"class":714},[704,1829,1830],{"class":1493},"message",[704,1832,1511],{"class":714},[704,1834,817],{"class":810},[704,1836,820],{"class":714},[704,1838,1839,1841,1843,1845,1847,1850,1852,1855],{"class":706,"line":1091},[704,1840,990],{"class":1746},[704,1842,715],{"class":714},[704,1844,1754],{"class":831},[704,1846,722],{"class":714},[704,1848,1849],{"class":718}," = ",[704,1851,1830],{"class":1746},[704,1853,1854],{"class":1746}," as",[704,1856,1857],{"class":831}," EvlogMessage\n",[704,1859,1860,1863,1865,1868,1870,1873,1875,1877,1880,1883,1885,1887,1890,1892,1894,1896,1899,1901,1904,1907,1909,1912,1915,1917,1920,1922,1925],{"class":706,"line":1096},[704,1861,1862],{"class":831},"  if",[704,1864,1490],{"class":714},[704,1866,1867],{"class":718},"event.level === ",[704,1869,1010],{"class":714},[704,1871,1872],{"class":731},"error",[704,1874,1010],{"class":714},[704,1876,1511],{"class":714},[704,1878,1879],{"class":718}," metrics.",[704,1881,1882],{"class":831},"increment",[704,1884,807],{"class":714},[704,1886,1010],{"class":714},[704,1888,1889],{"class":731},"errors",[704,1891,1010],{"class":714},[704,1893,965],{"class":714},[704,1895,715],{"class":714},[704,1897,1898],{"class":831}," path",[704,1900,650],{"class":714},[704,1902,1903],{"class":1493}," String",[704,1905,1906],{"class":718},"(event",[704,1908,634],{"class":714},[704,1910,1911],{"class":718},"path ",[704,1913,1914],{"class":714},"??",[704,1916,728],{"class":714},[704,1918,1919],{"class":731},"unknown",[704,1921,1010],{"class":714},[704,1923,1924],{"class":718},") ",[704,1926,1927],{"class":714},"})\n",[704,1929,1930,1932],{"class":706,"line":1104},[704,1931,837],{"class":714},[704,1933,840],{"class":718},[614,1935,1936,1937,1939,1940,1943,1944,1947],{},"Node types the published message as ",[623,1938,1919],{},", so narrow it once at the top of your handler. ",[623,1941,1942],{},"channel(name).subscribe()"," is used rather than the module-level ",[623,1945,1946],{},"subscribe()"," because it exists on every Node that evlog supports.",[614,1949,1950],{},"If you already depend on evlog and want the payload typed:",[695,1952,1955],{"className":697,"code":1953,"filename":1954,"language":699,"meta":700,"style":700},"import { subscribeToWideEvents } from 'evlog\u002Fdiagnostics'\n\nconst stop = await subscribeToWideEvents((event) => {\n  \u002F\u002F                                       ^? WideEvent\n  if (typeof event.status === 'number' && event.status >= 500) {\n    alerts.push({ path: String(event.path ?? '-'), requestId: String(event.requestId ?? '-') })\n  }\n})\n","alerts.ts",[623,1956,1957,1976,1980,2006,2011,2058,2131,2135],{"__ignoreMap":700},[704,1958,1959,1961,1963,1966,1968,1970,1972,1974],{"class":706,"line":707},[704,1960,711],{"class":710},[704,1962,715],{"class":714},[704,1964,1965],{"class":718}," subscribeToWideEvents",[704,1967,722],{"class":714},[704,1969,725],{"class":710},[704,1971,728],{"class":714},[704,1973,732],{"class":731},[704,1975,735],{"class":714},[704,1977,1978],{"class":706,"line":738},[704,1979,742],{"emptyLinePlaceholder":741},[704,1981,1982,1984,1987,1989,1991,1993,1995,1997,2000,2002,2004],{"class":706,"line":745},[704,1983,1341],{"class":810},[704,1985,1986],{"class":718}," stop ",[704,1988,1347],{"class":714},[704,1990,1002],{"class":710},[704,1992,1965],{"class":751},[704,1994,807],{"class":718},[704,1996,807],{"class":714},[704,1998,1999],{"class":1493},"event",[704,2001,1511],{"class":714},[704,2003,817],{"class":810},[704,2005,820],{"class":714},[704,2007,2008],{"class":706,"line":823},[704,2009,2010],{"class":1256},"  \u002F\u002F                                       ^? WideEvent\n",[704,2012,2013,2015,2017,2020,2022,2024,2027,2030,2032,2035,2037,2040,2042,2044,2046,2049,2053,2055],{"class":706,"line":834},[704,2014,1862],{"class":710},[704,2016,1490],{"class":831},[704,2018,2019],{"class":714},"typeof",[704,2021,1754],{"class":718},[704,2023,634],{"class":714},[704,2025,2026],{"class":718},"status",[704,2028,2029],{"class":714}," ===",[704,2031,728],{"class":714},[704,2033,2034],{"class":731},"number",[704,2036,1010],{"class":714},[704,2038,2039],{"class":714}," &&",[704,2041,1754],{"class":718},[704,2043,634],{"class":714},[704,2045,2026],{"class":718},[704,2047,2048],{"class":714}," >=",[704,2050,2052],{"class":2051},"sbssI"," 500",[704,2054,1924],{"class":831},[704,2056,2057],{"class":714},"{\n",[704,2059,2060,2063,2065,2068,2070,2072,2074,2076,2078,2080,2082,2084,2087,2090,2092,2095,2097,2099,2101,2104,2106,2108,2110,2112,2114,2117,2119,2121,2123,2125,2127,2129],{"class":706,"line":916},[704,2061,2062],{"class":718},"    alerts",[704,2064,634],{"class":714},[704,2066,2067],{"class":751},"push",[704,2069,807],{"class":831},[704,2071,1072],{"class":714},[704,2073,1898],{"class":831},[704,2075,650],{"class":714},[704,2077,1903],{"class":751},[704,2079,807],{"class":831},[704,2081,1999],{"class":718},[704,2083,634],{"class":714},[704,2085,2086],{"class":718},"path",[704,2088,2089],{"class":714}," ??",[704,2091,728],{"class":714},[704,2093,2094],{"class":731},"-",[704,2096,1010],{"class":714},[704,2098,1511],{"class":831},[704,2100,965],{"class":714},[704,2102,2103],{"class":831}," requestId",[704,2105,650],{"class":714},[704,2107,1903],{"class":751},[704,2109,807],{"class":831},[704,2111,1999],{"class":718},[704,2113,634],{"class":714},[704,2115,2116],{"class":718},"requestId",[704,2118,2089],{"class":714},[704,2120,728],{"class":714},[704,2122,2094],{"class":731},[704,2124,1010],{"class":714},[704,2126,1924],{"class":831},[704,2128,837],{"class":714},[704,2130,840],{"class":831},[704,2132,2133],{"class":706,"line":1091},[704,2134,1154],{"class":714},[704,2136,2137,2139],{"class":706,"line":1096},[704,2138,837],{"class":714},[704,2140,840],{"class":718},[614,2142,2143,2144,2147,2148,2150],{},"Fields beyond the ",[617,2145,2146],{"href":52},"base event"," are typed ",[623,2149,1919],{},", and events emitted outside a request carry no HTTP fields at all, so narrow before using them rather than casting.",[636,2152,2154],{"id":2153},"what-a-subscriber-receives","What a subscriber receives",[614,2156,2157],{},"The same object a drain receives: post-audit, post-redaction, post-enrich. Requests carry everything enrichers added: geo, user agent, trace context:",[695,2159,2162],{"className":2160,"code":2161,"language":1557,"meta":700,"style":700},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"timestamp\": \"2026-08-02T10:23:45.612Z\",\n  \"level\": \"error\",\n  \"service\": \"checkout\",\n  \"environment\": \"production\",\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Fcheckout\",\n  \"status\": 500,\n  \"duration\": \"1.20s\",\n  \"requestId\": \"4a8ff3a8-...\",\n  \"user\": { \"id\": \"usr_123\", \"plan\": \"premium\" },\n  \"error\": { \"name\": \"PaymentDeclined\", \"message\": \"Card declined\" }\n}\n",[623,2163,2164,2168,2191,2210,2230,2250,2270,2289,2303,2323,2342,2392,2439],{"__ignoreMap":700},[704,2165,2166],{"class":706,"line":707},[704,2167,2057],{"class":714},[704,2169,2170,2173,2176,2179,2181,2184,2187,2189],{"class":706,"line":738},[704,2171,2172],{"class":714},"  \"",[704,2174,2175],{"class":810},"timestamp",[704,2177,2178],{"class":714},"\"",[704,2180,650],{"class":714},[704,2182,2183],{"class":714}," \"",[704,2185,2186],{"class":731},"2026-08-02T10:23:45.612Z",[704,2188,2178],{"class":714},[704,2190,1148],{"class":714},[704,2192,2193,2195,2198,2200,2202,2204,2206,2208],{"class":706,"line":745},[704,2194,2172],{"class":714},[704,2196,2197],{"class":810},"level",[704,2199,2178],{"class":714},[704,2201,650],{"class":714},[704,2203,2183],{"class":714},[704,2205,1872],{"class":731},[704,2207,2178],{"class":714},[704,2209,1148],{"class":714},[704,2211,2212,2214,2217,2219,2221,2223,2226,2228],{"class":706,"line":823},[704,2213,2172],{"class":714},[704,2215,2216],{"class":810},"service",[704,2218,2178],{"class":714},[704,2220,650],{"class":714},[704,2222,2183],{"class":714},[704,2224,2225],{"class":731},"checkout",[704,2227,2178],{"class":714},[704,2229,1148],{"class":714},[704,2231,2232,2234,2237,2239,2241,2243,2246,2248],{"class":706,"line":834},[704,2233,2172],{"class":714},[704,2235,2236],{"class":810},"environment",[704,2238,2178],{"class":714},[704,2240,650],{"class":714},[704,2242,2183],{"class":714},[704,2244,2245],{"class":731},"production",[704,2247,2178],{"class":714},[704,2249,1148],{"class":714},[704,2251,2252,2254,2257,2259,2261,2263,2266,2268],{"class":706,"line":916},[704,2253,2172],{"class":714},[704,2255,2256],{"class":810},"method",[704,2258,2178],{"class":714},[704,2260,650],{"class":714},[704,2262,2183],{"class":714},[704,2264,2265],{"class":731},"POST",[704,2267,2178],{"class":714},[704,2269,1148],{"class":714},[704,2271,2272,2274,2276,2278,2280,2282,2285,2287],{"class":706,"line":1091},[704,2273,2172],{"class":714},[704,2275,2086],{"class":810},[704,2277,2178],{"class":714},[704,2279,650],{"class":714},[704,2281,2183],{"class":714},[704,2283,2284],{"class":731},"\u002Fapi\u002Fcheckout",[704,2286,2178],{"class":714},[704,2288,1148],{"class":714},[704,2290,2291,2293,2295,2297,2299,2301],{"class":706,"line":1096},[704,2292,2172],{"class":714},[704,2294,2026],{"class":810},[704,2296,2178],{"class":714},[704,2298,650],{"class":714},[704,2300,2052],{"class":2051},[704,2302,1148],{"class":714},[704,2304,2305,2307,2310,2312,2314,2316,2319,2321],{"class":706,"line":1104},[704,2306,2172],{"class":714},[704,2308,2309],{"class":810},"duration",[704,2311,2178],{"class":714},[704,2313,650],{"class":714},[704,2315,2183],{"class":714},[704,2317,2318],{"class":731},"1.20s",[704,2320,2178],{"class":714},[704,2322,1148],{"class":714},[704,2324,2325,2327,2329,2331,2333,2335,2338,2340],{"class":706,"line":1117},[704,2326,2172],{"class":714},[704,2328,2116],{"class":810},[704,2330,2178],{"class":714},[704,2332,650],{"class":714},[704,2334,2183],{"class":714},[704,2336,2337],{"class":731},"4a8ff3a8-...",[704,2339,2178],{"class":714},[704,2341,1148],{"class":714},[704,2343,2344,2346,2349,2351,2353,2355,2357,2360,2362,2364,2366,2369,2371,2373,2375,2378,2380,2382,2384,2387,2389],{"class":706,"line":1127},[704,2345,2172],{"class":714},[704,2347,2348],{"class":810},"user",[704,2350,2178],{"class":714},[704,2352,650],{"class":714},[704,2354,715],{"class":714},[704,2356,2183],{"class":714},[704,2358,2359],{"class":1746},"id",[704,2361,2178],{"class":714},[704,2363,650],{"class":714},[704,2365,2183],{"class":714},[704,2367,2368],{"class":731},"usr_123",[704,2370,2178],{"class":714},[704,2372,965],{"class":714},[704,2374,2183],{"class":714},[704,2376,2377],{"class":1746},"plan",[704,2379,2178],{"class":714},[704,2381,650],{"class":714},[704,2383,2183],{"class":714},[704,2385,2386],{"class":731},"premium",[704,2388,2178],{"class":714},[704,2390,2391],{"class":714}," },\n",[704,2393,2394,2396,2398,2400,2402,2404,2406,2409,2411,2413,2415,2418,2420,2422,2424,2426,2428,2430,2432,2435,2437],{"class":706,"line":1136},[704,2395,2172],{"class":714},[704,2397,1872],{"class":810},[704,2399,2178],{"class":714},[704,2401,650],{"class":714},[704,2403,715],{"class":714},[704,2405,2183],{"class":714},[704,2407,2408],{"class":1746},"name",[704,2410,2178],{"class":714},[704,2412,650],{"class":714},[704,2414,2183],{"class":714},[704,2416,2417],{"class":731},"PaymentDeclined",[704,2419,2178],{"class":714},[704,2421,965],{"class":714},[704,2423,2183],{"class":714},[704,2425,1830],{"class":1746},[704,2427,2178],{"class":714},[704,2429,650],{"class":714},[704,2431,2183],{"class":714},[704,2433,2434],{"class":731},"Card declined",[704,2436,2178],{"class":714},[704,2438,1800],{"class":714},[704,2440,2441],{"class":706,"line":1142},[704,2442,2443],{"class":714},"}\n",[614,2445,2446,2447,2450,2451,2454,2455,2458,2459,2462,2463,634],{},"Events emitted outside a request (",[623,2448,2449],{},"log.info({ ... })",", ",[623,2452,2453],{},"createLogger().emit()",") arrive without the HTTP fields, and events from ",[623,2456,2457],{},"log.fork()"," carry ",[623,2460,2461],{},"operation"," and ",[623,2464,2465],{},"_parentRequestId",[1688,2467,2470,2471,2474,2475,2478],{"color":2468,"icon":2469},"warning","i-lucide-triangle-alert","The event is the live object, not a copy, so mutating it mutates what drains receive. Treat it as read-only. And a subscriber that throws is ",[658,2472,2473],{},"not"," contained: ",[623,2476,2477],{},"Channel.publish()"," re-raises it as an uncaught exception on the next tick, which is fatal in most apps. Keep subscribers total.",[614,2480,2481,2482,2485],{},"In pretty mode (the dev default), tagged logs like ",[623,2483,2484],{},"log.info('auth', 'User logged in')"," are written straight to the console and never become wide events, so they do not appear on the channel. Wide events themselves are published in both modes.",[636,2487,2489],{"id":2488},"what-you-can-build","What you can build",[2491,2492,2494],"h3",{"id":2493},"an-integration-that-does-not-depend-on-evlog","An integration that does not depend on evlog",[614,2496,2497,2498,2500],{},"A package that subscribes needs the channel name and nothing else: no ",[623,2499,1369],{}," dependency, no peer range to keep in sync, no wiring in the host app beyond importing it:",[695,2502,2505],{"className":697,"code":2503,"filename":2504,"language":699,"meta":700,"style":700},"import { channel } from 'node:diagnostics_channel'\n\ntype EvlogMessage = {\n  event: Record\u003Cstring, unknown> & { timestamp: string; level: string; service: string }\n}\n\nchannel('evlog.event').subscribe((message) => {\n  const { event } = message as EvlogMessage\n\n  acme.ingest({\n    at: event.timestamp,\n    level: event.level,\n    service: event.service,\n    attributes: event,\n  })\n})\n","acme-apm\u002Fsrc\u002Fevlog.ts",[623,2506,2507,2525,2529,2539,2587,2591,2595,2623,2641,2645,2659,2674,2689,2704,2715,2722],{"__ignoreMap":700},[704,2508,2509,2511,2513,2515,2517,2519,2521,2523],{"class":706,"line":707},[704,2510,711],{"class":710},[704,2512,715],{"class":714},[704,2514,1719],{"class":718},[704,2516,722],{"class":714},[704,2518,725],{"class":710},[704,2520,728],{"class":714},[704,2522,625],{"class":731},[704,2524,735],{"class":714},[704,2526,2527],{"class":706,"line":738},[704,2528,742],{"emptyLinePlaceholder":741},[704,2530,2531,2533,2535,2537],{"class":706,"line":745},[704,2532,1743],{"class":810},[704,2534,1747],{"class":1746},[704,2536,973],{"class":714},[704,2538,820],{"class":714},[704,2540,2541,2544,2546,2548,2550,2552,2554,2556,2558,2560,2562,2565,2567,2569,2571,2573,2575,2577,2579,2581,2583,2585],{"class":706,"line":823},[704,2542,2543],{"class":831},"  event",[704,2545,650],{"class":714},[704,2547,1759],{"class":1746},[704,2549,1762],{"class":714},[704,2551,1765],{"class":1746},[704,2553,965],{"class":714},[704,2555,1770],{"class":1746},[704,2557,1773],{"class":714},[704,2559,1776],{"class":714},[704,2561,715],{"class":714},[704,2563,2564],{"class":831}," timestamp",[704,2566,650],{"class":714},[704,2568,1786],{"class":1746},[704,2570,1789],{"class":714},[704,2572,1781],{"class":831},[704,2574,650],{"class":714},[704,2576,1786],{"class":1746},[704,2578,1789],{"class":714},[704,2580,1075],{"class":831},[704,2582,650],{"class":714},[704,2584,1786],{"class":1746},[704,2586,1800],{"class":714},[704,2588,2589],{"class":706,"line":834},[704,2590,2443],{"class":714},[704,2592,2593],{"class":706,"line":916},[704,2594,742],{"emptyLinePlaceholder":741},[704,2596,2597,2599,2601,2603,2605,2607,2609,2611,2613,2615,2617,2619,2621],{"class":706,"line":1091},[704,2598,1809],{"class":1746},[704,2600,807],{"class":718},[704,2602,1010],{"class":714},[704,2604,629],{"class":731},[704,2606,1010],{"class":714},[704,2608,1820],{"class":718},[704,2610,1823],{"class":1746},[704,2612,807],{"class":718},[704,2614,807],{"class":714},[704,2616,1830],{"class":1493},[704,2618,1511],{"class":714},[704,2620,817],{"class":810},[704,2622,820],{"class":714},[704,2624,2625,2627,2629,2631,2633,2635,2637,2639],{"class":706,"line":1096},[704,2626,990],{"class":1746},[704,2628,715],{"class":714},[704,2630,1754],{"class":831},[704,2632,722],{"class":714},[704,2634,1849],{"class":718},[704,2636,1830],{"class":1746},[704,2638,1854],{"class":1746},[704,2640,1857],{"class":831},[704,2642,2643],{"class":706,"line":1104},[704,2644,742],{"emptyLinePlaceholder":741},[704,2646,2647,2650,2652,2655,2657],{"class":706,"line":1117},[704,2648,2649],{"class":1746},"  acme",[704,2651,634],{"class":714},[704,2653,2654],{"class":1746},"ingest",[704,2656,807],{"class":718},[704,2658,2057],{"class":714},[704,2660,2661,2664,2666,2668,2670,2672],{"class":706,"line":1127},[704,2662,2663],{"class":831},"    at",[704,2665,650],{"class":714},[704,2667,1754],{"class":1746},[704,2669,634],{"class":714},[704,2671,2175],{"class":1746},[704,2673,1148],{"class":714},[704,2675,2676,2679,2681,2683,2685,2687],{"class":706,"line":1136},[704,2677,2678],{"class":831},"    level",[704,2680,650],{"class":714},[704,2682,1754],{"class":1746},[704,2684,634],{"class":714},[704,2686,2197],{"class":1746},[704,2688,1148],{"class":714},[704,2690,2691,2694,2696,2698,2700,2702],{"class":706,"line":1142},[704,2692,2693],{"class":831},"    service",[704,2695,650],{"class":714},[704,2697,1754],{"class":1746},[704,2699,634],{"class":714},[704,2701,2216],{"class":1746},[704,2703,1148],{"class":714},[704,2705,2706,2709,2711,2713],{"class":706,"line":1151},[704,2707,2708],{"class":831},"    attributes",[704,2710,650],{"class":714},[704,2712,1754],{"class":1746},[704,2714,1148],{"class":714},[704,2716,2717,2720],{"class":706,"line":1157},[704,2718,2719],{"class":714},"  }",[704,2721,840],{"class":718},[704,2723,2725,2727],{"class":706,"line":2724},16,[704,2726,837],{"class":714},[704,2728,840],{"class":718},[695,2730,2733],{"className":697,"code":2731,"filename":2732,"language":699,"meta":700,"style":700},"import 'acme-apm\u002Fevlog'\n","the host app",[623,2734,2735],{"__ignoreMap":700},[704,2736,2737,2739,2741,2744],{"class":706,"line":707},[704,2738,711],{"class":710},[704,2740,728],{"class":714},[704,2742,2743],{"class":731},"acme-apm\u002Fevlog",[704,2745,735],{"class":714},[614,2747,2748,2749,634],{},"The same shape works for an internal library shared across services: one package subscribes, every service that imports it reports, and none of them touch ",[623,2750,633],{},[2491,2752,2754],{"id":2753},"counters-and-alerts-next-to-your-app","Counters and alerts next to your app",[614,2756,2757],{},"A subscriber is a plain function, so anything you can compute in-process you can compute here, without giving up the drain slot, which stays free for shipping events to your backend:",[695,2759,2762],{"className":697,"code":2760,"filename":2761,"language":699,"meta":700,"style":700},"import { channel } from 'node:diagnostics_channel'\n\nconst errorsByPath = new Map\u003Cstring, number>()\n\nchannel('evlog.event').subscribe((message) => {\n  const { event } = message as { event: Record\u003Cstring, unknown> & { level: string } }\n  if (event.level !== 'error') return\n\n  const path = String(event.path ?? 'unknown')\n  errorsByPath.set(path, (errorsByPath.get(path) ?? 0) + 1)\n\n  if (typeof event.status === 'number' && event.status >= 500) {\n    void pager.notify(`5xx on ${path}`, { requestId: event.requestId })\n  }\n})\n\nexport function errorCounts(): Record\u003Cstring, number> {\n  return Object.fromEntries(errorsByPath)\n}\n","observability.ts",[623,2763,2764,2782,2786,2813,2817,2847,2896,2922,2926,2954,3000,3004,3042,3089,3093,3099,3103,3131,3150],{"__ignoreMap":700},[704,2765,2766,2768,2770,2772,2774,2776,2778,2780],{"class":706,"line":707},[704,2767,711],{"class":710},[704,2769,715],{"class":714},[704,2771,1719],{"class":718},[704,2773,722],{"class":714},[704,2775,725],{"class":710},[704,2777,728],{"class":714},[704,2779,625],{"class":731},[704,2781,735],{"class":714},[704,2783,2784],{"class":706,"line":738},[704,2785,742],{"emptyLinePlaceholder":741},[704,2787,2788,2790,2793,2795,2797,2800,2802,2804,2806,2809,2811],{"class":706,"line":745},[704,2789,1341],{"class":810},[704,2791,2792],{"class":718}," errorsByPath ",[704,2794,1347],{"class":714},[704,2796,1350],{"class":714},[704,2798,2799],{"class":751}," Map",[704,2801,1762],{"class":714},[704,2803,1765],{"class":1746},[704,2805,965],{"class":714},[704,2807,2808],{"class":1746}," number",[704,2810,1773],{"class":714},[704,2812,754],{"class":718},[704,2814,2815],{"class":706,"line":823},[704,2816,742],{"emptyLinePlaceholder":741},[704,2818,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2845],{"class":706,"line":834},[704,2820,1809],{"class":751},[704,2822,807],{"class":718},[704,2824,1010],{"class":714},[704,2826,629],{"class":731},[704,2828,1010],{"class":714},[704,2830,1511],{"class":718},[704,2832,634],{"class":714},[704,2834,1823],{"class":751},[704,2836,807],{"class":718},[704,2838,807],{"class":714},[704,2840,1830],{"class":1493},[704,2842,1511],{"class":714},[704,2844,817],{"class":810},[704,2846,820],{"class":714},[704,2848,2849,2851,2853,2855,2857,2859,2862,2864,2866,2868,2870,2872,2874,2876,2878,2880,2882,2884,2886,2888,2890,2892,2894],{"class":706,"line":916},[704,2850,990],{"class":810},[704,2852,715],{"class":714},[704,2854,1754],{"class":718},[704,2856,722],{"class":714},[704,2858,973],{"class":714},[704,2860,2861],{"class":718}," message",[704,2863,1854],{"class":710},[704,2865,715],{"class":714},[704,2867,1754],{"class":831},[704,2869,650],{"class":714},[704,2871,1759],{"class":1746},[704,2873,1762],{"class":714},[704,2875,1765],{"class":1746},[704,2877,965],{"class":714},[704,2879,1770],{"class":1746},[704,2881,1773],{"class":714},[704,2883,1776],{"class":714},[704,2885,715],{"class":714},[704,2887,1781],{"class":831},[704,2889,650],{"class":714},[704,2891,1786],{"class":1746},[704,2893,722],{"class":714},[704,2895,1800],{"class":714},[704,2897,2898,2900,2902,2904,2906,2908,2911,2913,2915,2917,2919],{"class":706,"line":1091},[704,2899,1862],{"class":710},[704,2901,1490],{"class":831},[704,2903,1999],{"class":718},[704,2905,634],{"class":714},[704,2907,2197],{"class":718},[704,2909,2910],{"class":714}," !==",[704,2912,728],{"class":714},[704,2914,1872],{"class":731},[704,2916,1010],{"class":714},[704,2918,1924],{"class":831},[704,2920,2921],{"class":710},"return\n",[704,2923,2924],{"class":706,"line":1096},[704,2925,742],{"emptyLinePlaceholder":741},[704,2927,2928,2930,2932,2934,2936,2938,2940,2942,2944,2946,2948,2950,2952],{"class":706,"line":1104},[704,2929,990],{"class":810},[704,2931,1898],{"class":718},[704,2933,973],{"class":714},[704,2935,1903],{"class":751},[704,2937,807],{"class":831},[704,2939,1999],{"class":718},[704,2941,634],{"class":714},[704,2943,2086],{"class":718},[704,2945,2089],{"class":714},[704,2947,728],{"class":714},[704,2949,1919],{"class":731},[704,2951,1010],{"class":714},[704,2953,840],{"class":831},[704,2955,2956,2959,2961,2963,2965,2967,2969,2971,2974,2976,2979,2981,2983,2985,2987,2990,2992,2995,2998],{"class":706,"line":1117},[704,2957,2958],{"class":718},"  errorsByPath",[704,2960,634],{"class":714},[704,2962,1525],{"class":751},[704,2964,807],{"class":831},[704,2966,2086],{"class":718},[704,2968,965],{"class":714},[704,2970,1490],{"class":831},[704,2972,2973],{"class":718},"errorsByPath",[704,2975,634],{"class":714},[704,2977,2978],{"class":751},"get",[704,2980,807],{"class":831},[704,2982,2086],{"class":718},[704,2984,1924],{"class":831},[704,2986,1914],{"class":714},[704,2988,2989],{"class":2051}," 0",[704,2991,1924],{"class":831},[704,2993,2994],{"class":714},"+",[704,2996,2997],{"class":2051}," 1",[704,2999,840],{"class":831},[704,3001,3002],{"class":706,"line":1127},[704,3003,742],{"emptyLinePlaceholder":741},[704,3005,3006,3008,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028,3030,3032,3034,3036,3038,3040],{"class":706,"line":1136},[704,3007,1862],{"class":710},[704,3009,1490],{"class":831},[704,3011,2019],{"class":714},[704,3013,1754],{"class":718},[704,3015,634],{"class":714},[704,3017,2026],{"class":718},[704,3019,2029],{"class":714},[704,3021,728],{"class":714},[704,3023,2034],{"class":731},[704,3025,1010],{"class":714},[704,3027,2039],{"class":714},[704,3029,1754],{"class":718},[704,3031,634],{"class":714},[704,3033,2026],{"class":718},[704,3035,2048],{"class":714},[704,3037,2052],{"class":2051},[704,3039,1924],{"class":831},[704,3041,2057],{"class":714},[704,3043,3044,3047,3050,3052,3055,3057,3060,3063,3066,3068,3071,3073,3075,3077,3079,3081,3083,3085,3087],{"class":706,"line":1142},[704,3045,3046],{"class":714},"    void",[704,3048,3049],{"class":718}," pager",[704,3051,634],{"class":714},[704,3053,3054],{"class":751},"notify",[704,3056,807],{"class":831},[704,3058,3059],{"class":714},"`",[704,3061,3062],{"class":731},"5xx on ",[704,3064,3065],{"class":714},"${",[704,3067,2086],{"class":718},[704,3069,3070],{"class":714},"}`",[704,3072,965],{"class":714},[704,3074,715],{"class":714},[704,3076,2103],{"class":831},[704,3078,650],{"class":714},[704,3080,1754],{"class":718},[704,3082,634],{"class":714},[704,3084,2116],{"class":718},[704,3086,722],{"class":714},[704,3088,840],{"class":831},[704,3090,3091],{"class":706,"line":1151},[704,3092,1154],{"class":714},[704,3094,3095,3097],{"class":706,"line":1157},[704,3096,837],{"class":714},[704,3098,840],{"class":718},[704,3100,3101],{"class":706,"line":2724},[704,3102,742],{"emptyLinePlaceholder":741},[704,3104,3106,3108,3111,3114,3117,3119,3121,3123,3125,3127,3129],{"class":706,"line":3105},17,[704,3107,798],{"class":710},[704,3109,3110],{"class":810}," function",[704,3112,3113],{"class":751}," errorCounts",[704,3115,3116],{"class":714},"():",[704,3118,1759],{"class":1746},[704,3120,1762],{"class":714},[704,3122,1765],{"class":1746},[704,3124,965],{"class":714},[704,3126,2808],{"class":1746},[704,3128,1773],{"class":714},[704,3130,820],{"class":714},[704,3132,3134,3136,3139,3141,3144,3146,3148],{"class":706,"line":3133},18,[704,3135,1099],{"class":710},[704,3137,3138],{"class":718}," Object",[704,3140,634],{"class":714},[704,3142,3143],{"class":751},"fromEntries",[704,3145,807],{"class":831},[704,3147,2973],{"class":718},[704,3149,840],{"class":831},[704,3151,3153],{"class":706,"line":3152},19,[704,3154,2443],{"class":714},[614,3156,3157,3158,3160],{},"A ",[617,3159,645],{"href":518}," does this too, and is the better choice when the code lives in your own app. The channel wins when the subscriber ships as a separate package, or when it has to attach without editing the app's logger configuration.",[636,3162,300],{"id":3163},"cloudflare-workers",[614,3165,3166,3167,3171,3172,3174],{},"Workers forwards every diagnostics channel message to a ",[617,3168,674],{"href":3169,"rel":3170},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers\u002Fobservability\u002Flogs\u002Ftail-workers\u002F",[621],". Enable the channel in your Worker and the wide events leave the isolate with no drain, no ",[623,3173,678],{},", and their own CPU budget, and the Tail Worker does the shipping, after the response has already gone out:",[695,3176,3179],{"className":697,"code":3177,"filename":3178,"language":699,"meta":700,"style":700},"export default {\n  async tail(events) {\n    for (const event of events) {\n      for (const messageData of event.diagnosticsChannelEvents) {\n        if (messageData.channel !== 'evlog.event') continue\n\n        await fetch('https:\u002F\u002Flogs.example.com\u002Fingest', {\n          method: 'POST',\n          headers: { 'Content-Type': 'application\u002Fjson' },\n          body: JSON.stringify(messageData.message.event),\n        })\n      }\n    }\n  },\n}\n","tail-worker\u002Findex.ts",[623,3180,3181,3189,3206,3227,3252,3279,3283,3304,3319,3346,3377,3384,3389,3394,3399],{"__ignoreMap":700},[704,3182,3183,3185,3187],{"class":706,"line":707},[704,3184,798],{"class":710},[704,3186,801],{"class":710},[704,3188,820],{"class":714},[704,3190,3191,3194,3197,3199,3202,3204],{"class":706,"line":738},[704,3192,3193],{"class":810},"  async",[704,3195,3196],{"class":831}," tail",[704,3198,807],{"class":714},[704,3200,3201],{"class":1493},"events",[704,3203,1511],{"class":714},[704,3205,820],{"class":714},[704,3207,3208,3211,3213,3215,3217,3220,3223,3225],{"class":706,"line":745},[704,3209,3210],{"class":710},"    for",[704,3212,1490],{"class":831},[704,3214,1341],{"class":810},[704,3216,1754],{"class":718},[704,3218,3219],{"class":714}," of",[704,3221,3222],{"class":718}," events",[704,3224,1924],{"class":831},[704,3226,2057],{"class":714},[704,3228,3229,3232,3234,3236,3239,3241,3243,3245,3248,3250],{"class":706,"line":823},[704,3230,3231],{"class":710},"      for",[704,3233,1490],{"class":831},[704,3235,1341],{"class":810},[704,3237,3238],{"class":718}," messageData",[704,3240,3219],{"class":714},[704,3242,1754],{"class":718},[704,3244,634],{"class":714},[704,3246,3247],{"class":718},"diagnosticsChannelEvents",[704,3249,1924],{"class":831},[704,3251,2057],{"class":714},[704,3253,3254,3257,3259,3262,3264,3266,3268,3270,3272,3274,3276],{"class":706,"line":834},[704,3255,3256],{"class":710},"        if",[704,3258,1490],{"class":831},[704,3260,3261],{"class":718},"messageData",[704,3263,634],{"class":714},[704,3265,1809],{"class":718},[704,3267,2910],{"class":714},[704,3269,728],{"class":714},[704,3271,629],{"class":731},[704,3273,1010],{"class":714},[704,3275,1924],{"class":831},[704,3277,3278],{"class":710},"continue\n",[704,3280,3281],{"class":706,"line":916},[704,3282,742],{"emptyLinePlaceholder":741},[704,3284,3285,3288,3291,3293,3295,3298,3300,3302],{"class":706,"line":1091},[704,3286,3287],{"class":710},"        await",[704,3289,3290],{"class":751}," fetch",[704,3292,807],{"class":831},[704,3294,1010],{"class":714},[704,3296,3297],{"class":731},"https:\u002F\u002Flogs.example.com\u002Fingest",[704,3299,1010],{"class":714},[704,3301,965],{"class":714},[704,3303,820],{"class":714},[704,3305,3306,3309,3311,3313,3315,3317],{"class":706,"line":1096},[704,3307,3308],{"class":831},"          method",[704,3310,650],{"class":714},[704,3312,728],{"class":714},[704,3314,2265],{"class":731},[704,3316,1010],{"class":714},[704,3318,1148],{"class":714},[704,3320,3321,3324,3326,3328,3330,3333,3335,3337,3339,3342,3344],{"class":706,"line":1104},[704,3322,3323],{"class":831},"          headers",[704,3325,650],{"class":714},[704,3327,715],{"class":714},[704,3329,728],{"class":714},[704,3331,3332],{"class":831},"Content-Type",[704,3334,1010],{"class":714},[704,3336,650],{"class":714},[704,3338,728],{"class":714},[704,3340,3341],{"class":731},"application\u002Fjson",[704,3343,1010],{"class":714},[704,3345,2391],{"class":714},[704,3347,3348,3351,3353,3356,3358,3361,3363,3365,3367,3369,3371,3373,3375],{"class":706,"line":1117},[704,3349,3350],{"class":831},"          body",[704,3352,650],{"class":714},[704,3354,3355],{"class":718}," JSON",[704,3357,634],{"class":714},[704,3359,3360],{"class":751},"stringify",[704,3362,807],{"class":831},[704,3364,3261],{"class":718},[704,3366,634],{"class":714},[704,3368,1830],{"class":718},[704,3370,634],{"class":714},[704,3372,1999],{"class":718},[704,3374,1511],{"class":831},[704,3376,1148],{"class":714},[704,3378,3379,3382],{"class":706,"line":1127},[704,3380,3381],{"class":714},"        }",[704,3383,840],{"class":831},[704,3385,3386],{"class":706,"line":1136},[704,3387,3388],{"class":714},"      }\n",[704,3390,3391],{"class":706,"line":1142},[704,3392,3393],{"class":714},"    }\n",[704,3395,3396],{"class":706,"line":1151},[704,3397,3398],{"class":714},"  },\n",[704,3400,3401],{"class":706,"line":1157},[704,3402,2443],{"class":714},[614,3404,3405,3406,2450,3408,2462,3410,3412,3413,3415,3416,3419,3420,3423],{},"Each entry carries ",[623,3407,2175],{},[623,3409,1809],{},[623,3411,1830],{},", with ",[623,3414,1830],{}," being what evlog published, so the wide event is at ",[623,3417,3418],{},"messageData.message.event",". Requires the ",[623,3421,3422],{},"nodejs_compat"," flag, and messages go through the structured clone algorithm, so only cloneable values survive.",[636,3425,3427],{"id":3426},"when-a-plugin-is-the-better-tool","When a plugin is the better tool",[614,3429,3430,3431,3434],{},"The channel is not a replacement for ",[617,3432,3433],{"href":518},"plugins",". It is narrower on purpose:",[3436,3437,3438,3451],"table",{},[3439,3440,3441],"thead",{},[3442,3443,3444,3448],"tr",{},[3445,3446,3447],"th",{},"You want to…",[3445,3449,3450],{},"Use",[3452,3453,3454,3465,3476,3488,3496],"tbody",{},[3442,3455,3456,3460],{},[3457,3458,3459],"td",{},"Ship events to a backend, with batching and retry",[3457,3461,3462],{},[617,3463,3464],{"href":535},"Custom drain",[3442,3466,3467,3470],{},[3457,3468,3469],{},"Add fields to the event before it drains",[3457,3471,3472,3475],{},[617,3473,3474],{"href":522},"Enricher"," or a plugin",[3442,3477,3478,3481],{},[3457,3479,3480],{},"Fan out to several in-process consumers",[3457,3482,3483,3484,3487],{},"Plugins — ",[623,3485,3486],{},"initLogger({ plugins: [a, b, c] })"," already does this",[3442,3489,3490,3493],{},[3457,3491,3492],{},"Subscribe from a package that must not depend on evlog",[3457,3494,3495],{},"This channel",[3442,3497,3498,3501],{},[3457,3499,3500],{},"Get events out of a Cloudflare Worker without a drain",[3457,3502,3495],{},[614,3504,3505,3508],{},[623,3506,3507],{},"diagnostics_channel"," is in-process: nothing attaches to a running process from the outside. A subscriber's code has to be loaded by your app either way, so the channel saves it a line of configuration, not a dependency.",[3510,3511,3512],"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 .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":700,"searchDepth":738,"depth":738,"links":3514},[3515,3516,3517,3518,3519,3523,3524],{"id":638,"depth":738,"text":639},{"id":689,"depth":738,"text":690},{"id":1700,"depth":738,"text":1701},{"id":2153,"depth":738,"text":2154},{"id":2488,"depth":738,"text":2489,"children":3520},[3521,3522],{"id":2493,"depth":745,"text":2494},{"id":2753,"depth":745,"text":2754},{"id":3163,"depth":738,"text":300},{"id":3426,"depth":738,"text":3427},"Publish every wide event on a node:diagnostics_channel, so a consumer subscribes without importing evlog and Cloudflare can Tail Worker it.","md",[3528,3531],{"label":517,"icon":492,"to":518,"color":3529,"variant":3530},"neutral","subtle",{"label":494,"icon":3532,"to":495,"color":3529,"variant":3530},"i-lucide-radio",{},{"title":504,"icon":497},{"title":609,"description":3525},"1gPOASUiifn1EEZaY4yKZHM5Wr7ThOrGNXV58ERROIQ",[3538,3540],{"title":499,"path":500,"stem":501,"description":3539,"icon":502,"children":-1},"Build evlog support for a framework or runtime that has no integration, with defineFrameworkIntegration or the lower-level helpers.",{"title":508,"path":509,"stem":510,"description":3541,"icon":511,"children":-1},"Replay and tail the local NDJSON drain with readFsLogs and tailFsLogs — works in-process or from any external Node tool, survives restarts.",1791240222579]