[{"data":1,"prerenderedAt":3547},["ShallowReactive",2],{"navigation_docs":3,"-extend-diagnostics-channel":612,"-extend-diagnostics-channel-surround":3542},[4,35,85,148,328,489,548,587],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Start","\u002Fstart","1.start",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",{"title":30,"path":31,"stem":32,"icon":33},"Choose your logger","\u002Fstart\u002Ftypescript-logging-library","1.start\u002F5.typescript-logging-library","i-lucide-file-code",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Learn","\u002Flearn","2.learn",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":66,"path":67,"stem":68,"icon":69},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":71,"path":72,"stem":73,"icon":74},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":76,"path":77,"stem":78,"icon":79},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":81,"path":82,"stem":83,"icon":84},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":86,"path":87,"stem":88,"children":89,"page":34},"CLI","\u002Fcli","3.cli",[90,93,98,103,108,113,118,123,128,133,138,143],{"title":41,"path":91,"stem":92,"icon":49},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":94,"path":95,"stem":96,"icon":97},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":99,"path":100,"stem":101,"icon":102},"logs","\u002Fcli\u002Flogs","3.cli\u002F10.logs","i-lucide-scroll-text",{"title":104,"path":105,"stem":106,"icon":107},"config","\u002Fcli\u002Fconfig","3.cli\u002F11.config","i-lucide-settings-2",{"title":109,"path":110,"stem":111,"icon":112},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":114,"path":115,"stem":116,"icon":117},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":119,"path":120,"stem":121,"icon":122},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":124,"path":125,"stem":126,"icon":127},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":129,"path":130,"stem":131,"icon":132},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":134,"path":135,"stem":136,"icon":137},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":139,"path":140,"stem":141,"icon":142},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":144,"path":145,"stem":146,"icon":147},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":149,"path":150,"stem":151,"children":152,"page":34},"Integrate","\u002Fintegrate","4.integrate",[153,157,240],{"title":41,"path":154,"stem":155,"icon":156},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":158,"path":159,"stem":160,"children":161,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[162,165,195,220],{"title":41,"path":163,"stem":164,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":166,"path":167,"stem":168,"children":169,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[170,175,180,185,190],{"title":171,"path":172,"stem":173,"icon":174},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":176,"path":177,"stem":178,"icon":179},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":181,"path":182,"stem":183,"icon":184},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":186,"path":187,"stem":188,"icon":189},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":191,"path":192,"stem":193,"icon":194},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":196,"path":197,"stem":198,"children":199,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[200,205,210,215],{"title":201,"path":202,"stem":203,"icon":204},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":206,"path":207,"stem":208,"icon":209},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":211,"path":212,"stem":213,"icon":214},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":216,"path":217,"stem":218,"icon":219},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":221,"path":222,"stem":223,"children":224,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[225,230,235],{"title":226,"path":227,"stem":228,"icon":229},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":231,"path":232,"stem":233,"icon":234},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":236,"path":237,"stem":238,"icon":239},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":241,"path":242,"stem":243,"children":244,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[245,249,254,259,264,269,274,279,284,289,294,299,304,309,313,318,323],{"title":41,"path":246,"stem":247,"icon":248},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":250,"path":251,"stem":252,"icon":253},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":255,"path":256,"stem":257,"icon":258},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":260,"path":261,"stem":262,"icon":263},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":265,"path":266,"stem":267,"icon":268},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":270,"path":271,"stem":272,"icon":273},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":275,"path":276,"stem":277,"icon":278},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":280,"path":281,"stem":282,"icon":283},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":285,"path":286,"stem":287,"icon":288},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":290,"path":291,"stem":292,"icon":293},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":295,"path":296,"stem":297,"icon":298},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":300,"path":301,"stem":302,"icon":303},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":305,"path":306,"stem":307,"icon":308},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":310,"path":311,"stem":312,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":314,"path":315,"stem":316,"icon":317},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":319,"path":320,"stem":321,"icon":322},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":324,"path":325,"stem":326,"icon":327},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":329,"path":330,"stem":331,"children":332,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[333,336,341,369,396,428,449,454,459,463],{"title":41,"path":334,"stem":335,"icon":117},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":337,"path":338,"stem":339,"icon":340},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":342,"icon":343,"path":344,"stem":345,"children":346,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[347,350,355,360,365],{"title":41,"path":348,"stem":349,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":351,"path":352,"stem":353,"icon":354},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":356,"path":357,"stem":358,"icon":359},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":361,"path":362,"stem":363,"icon":364},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":366,"path":367,"stem":368,"icon":147},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":370,"icon":371,"path":372,"stem":373,"children":374,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[375,378,383,388,392],{"title":41,"path":376,"stem":377,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":379,"path":380,"stem":381,"icon":382},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":384,"path":385,"stem":386,"icon":387},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":389,"path":390,"stem":391,"icon":340},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":393,"path":394,"stem":395,"icon":122},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":397,"icon":398,"path":399,"stem":400,"children":401,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[402,405,410,415,420,424],{"title":41,"path":403,"stem":404,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":406,"path":407,"stem":408,"icon":409},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":411,"path":412,"stem":413,"icon":414},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":416,"path":417,"stem":418,"icon":419},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":421,"path":422,"stem":423,"icon":398},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":425,"path":426,"stem":427,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":366,"icon":122,"path":429,"stem":430,"children":431,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[432,435,440,445],{"title":41,"path":433,"stem":434,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":436,"path":437,"stem":438,"icon":439},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":441,"path":442,"stem":443,"icon":444},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":446,"path":447,"stem":448,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":450,"path":451,"stem":452,"icon":453},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":455,"path":456,"stem":457,"icon":458},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":460,"path":461,"stem":462,"icon":444},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":464,"icon":465,"path":466,"stem":467,"children":468,"page":34},"Signals","i-lucide-scan-search","\u002Fuse-cases\u002Fsignals","5.use-cases\u002F7.signals",[469,472,477,482,485],{"title":41,"path":470,"stem":471,"icon":44},"\u002Fuse-cases\u002Fsignals\u002Foverview","5.use-cases\u002F7.signals\u002F01.overview",{"title":473,"path":474,"stem":475,"icon":476},"What You Can Ask","\u002Fuse-cases\u002Fsignals\u002Fask","5.use-cases\u002F7.signals\u002F02.ask","i-lucide-message-circle-question",{"title":478,"path":479,"stem":480,"icon":481},"What It Costs","\u002Fuse-cases\u002Fsignals\u002Fcost","5.use-cases\u002F7.signals\u002F03.cost","i-lucide-coins",{"title":446,"path":483,"stem":484,"icon":84},"\u002Fuse-cases\u002Fsignals\u002Freference","5.use-cases\u002F7.signals\u002F04.reference",{"title":425,"path":486,"stem":487,"icon":488},"\u002Fuse-cases\u002Fsignals\u002Frecipes","5.use-cases\u002F7.signals\u002F05.recipes","i-lucide-lightbulb",{"title":490,"path":491,"stem":492,"children":493,"page":34},"Extend","\u002Fextend","6.extend",[494,498,503,508,512,517,521,525,529,533,538,543],{"title":41,"path":495,"stem":496,"icon":497},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":499,"path":500,"stem":501,"icon":502},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":504,"path":505,"stem":506,"icon":507},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":509,"path":510,"stem":511,"icon":502},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":513,"path":514,"stem":515,"icon":516},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":425,"path":518,"stem":519,"icon":520},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":522,"path":523,"stem":524,"icon":497},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":526,"path":527,"stem":528,"icon":453},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":530,"path":531,"stem":532,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":534,"path":535,"stem":536,"icon":537},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":539,"path":540,"stem":541,"icon":542},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":544,"path":545,"stem":546,"icon":547},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":446,"path":549,"stem":550,"children":551,"page":34},"\u002Freference","7.reference",[552,556,561,564,569,573,578,582],{"title":41,"path":553,"stem":554,"icon":555},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":557,"path":558,"stem":559,"icon":560},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":393,"path":562,"stem":563,"icon":122},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":565,"path":566,"stem":567,"icon":568},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":570,"path":571,"stem":572,"icon":398},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":574,"path":575,"stem":576,"icon":577},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":579,"path":580,"stem":581,"icon":453},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":583,"path":584,"stem":585,"icon":586},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":588,"path":589,"stem":590,"children":591,"page":34},"Compare","\u002Fcompare","8.compare",[592,596,600,604,608],{"title":593,"path":594,"stem":595,"icon":577},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":597,"path":598,"stem":599,"icon":214},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":601,"path":602,"stem":603,"icon":577},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":605,"path":606,"stem":607,"icon":577},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":609,"path":610,"stem":611,"icon":577},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":613,"title":614,"body":615,"description":3530,"extension":3531,"links":3532,"meta":3538,"navigation":3539,"path":510,"seo":3540,"stem":511,"__hash__":3541},"docs\u002F6.extend\u002F11.diagnostics-channel.md","Diagnostics Channel",{"type":616,"value":617,"toc":3518},"minimark",[618,640,645,656,685,692,696,699,760,768,1677,1692,1703,1707,1710,1939,1953,1956,2146,2156,2160,2163,2449,2471,2484,2491,2495,2500,2506,2734,2751,2756,2760,2763,3160,3166,3169,3180,3408,3429,3433,3440,3508,3514],[619,620,621,631,632,635,636,639],"p",{},[622,623,627],"a",{"href":624,"rel":625},"https:\u002F\u002Fnodejs.org\u002Fapi\u002Fdiagnostics_channel.html",[626],"nofollow",[628,629,630],"code",{},"node:diagnostics_channel"," is the runtime's built-in pub\u002Fsub for instrumentation. evlog can publish every wide event on the ",[628,633,634],{},"evlog.event"," channel, so a consumer subscribes by channel name alone: no evlog import, no entry in ",[628,637,638],{},"initLogger()",".",[641,642,644],"h2",{"id":643},"what-its-for","What it's for",[619,646,647,648,651,652,655],{},"Two things you cannot do with a ",[622,649,650],{"href":523},"plugin"," or a ",[622,653,654],{"href":540},"drain",":",[657,658,659,670],"ul",{},[660,661,662,666,667,669],"li",{},[663,664,665],"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 ",[628,668,638],{}," call.",[660,671,672,675,676,680,681,684],{},[663,673,674],{},"Get events out of a Cloudflare Worker without a drain."," Workers forwards every channel message to a ",[622,677,679],{"href":678},"#cloudflare-workers","Tail Worker",", which runs after the response with its own CPU budget, no ",[628,682,683],{},"waitUntil",", no drain competing with your request.",[619,686,687,688,639],{},"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 ",[622,689,691],{"href":690},"#when-a-plugin-is-the-better-tool","comparison at the bottom of this page",[641,693,695],{"id":694},"enabling-it","Enabling it",[619,697,698],{},"It is off by default. Turn it on once, at startup:",[700,701,706],"pre",{"className":702,"code":703,"language":704,"meta":705,"style":705},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { enableDiagnosticsChannel } from 'evlog\u002Fdiagnostics'\n\nawait enableDiagnosticsChannel()\n","typescript","",[628,707,708,741,748],{"__ignoreMap":705},[709,710,713,717,721,725,728,731,734,738],"span",{"class":711,"line":712},"line",1,[709,714,716],{"class":715},"s7zQu","import",[709,718,720],{"class":719},"sMK4o"," {",[709,722,724],{"class":723},"sTEyZ"," enableDiagnosticsChannel",[709,726,727],{"class":719}," }",[709,729,730],{"class":715}," from",[709,732,733],{"class":719}," '",[709,735,737],{"class":736},"sfazB","evlog\u002Fdiagnostics",[709,739,740],{"class":719},"'\n",[709,742,744],{"class":711,"line":743},2,[709,745,747],{"emptyLinePlaceholder":746},true,"\n",[709,749,751,754,757],{"class":711,"line":750},3,[709,752,753],{"class":715},"await",[709,755,724],{"class":756},"s2Zo4",[709,758,759],{"class":723},"()\n",[619,761,762,763,767],{},"The call takes no options and is the same on every framework. Only ",[764,765,766],"em",{},"where"," your app runs startup code differs:",[769,770,771,846,926,1167,1251,1378,1586],"framework-tabs",{},[700,772,775],{"className":702,"code":773,"filename":250,"language":704,"meta":774,"style":705},"import { enableDiagnosticsChannel } from 'evlog\u002Fdiagnostics'\n\nexport default defineNitroPlugin(async () => {\n  await enableDiagnosticsChannel()\n})\n","server\u002Fplugins\u002Fevlog-diagnostics.ts",[628,776,777,795,799,826,837],{"__ignoreMap":705},[709,778,779,781,783,785,787,789,791,793],{"class":711,"line":712},[709,780,716],{"class":715},[709,782,720],{"class":719},[709,784,724],{"class":723},[709,786,727],{"class":719},[709,788,730],{"class":715},[709,790,733],{"class":719},[709,792,737],{"class":736},[709,794,740],{"class":719},[709,796,797],{"class":711,"line":743},[709,798,747],{"emptyLinePlaceholder":746},[709,800,801,804,807,810,813,817,820,823],{"class":711,"line":750},[709,802,803],{"class":715},"export",[709,805,806],{"class":715}," default",[709,808,809],{"class":756}," defineNitroPlugin",[709,811,812],{"class":723},"(",[709,814,816],{"class":815},"spNyl","async",[709,818,819],{"class":719}," ()",[709,821,822],{"class":815}," =>",[709,824,825],{"class":719}," {\n",[709,827,829,832,834],{"class":711,"line":828},4,[709,830,831],{"class":715},"  await",[709,833,724],{"class":756},[709,835,759],{"class":836},"swJcz",[709,838,840,843],{"class":711,"line":839},5,[709,841,842],{"class":719},"}",[709,844,845],{"class":723},")\n",[700,847,849],{"className":702,"code":848,"filename":265,"language":704,"meta":774,"style":705},"import { definePlugin } from 'nitro'\nimport { enableDiagnosticsChannel } from 'evlog\u002Fdiagnostics'\n\nexport default definePlugin(async () => {\n  await enableDiagnosticsChannel()\n})\n",[628,850,851,871,889,893,911,919],{"__ignoreMap":705},[709,852,853,855,857,860,862,864,866,869],{"class":711,"line":712},[709,854,716],{"class":715},[709,856,720],{"class":719},[709,858,859],{"class":723}," definePlugin",[709,861,727],{"class":719},[709,863,730],{"class":715},[709,865,733],{"class":719},[709,867,868],{"class":736},"nitro",[709,870,740],{"class":719},[709,872,873,875,877,879,881,883,885,887],{"class":711,"line":743},[709,874,716],{"class":715},[709,876,720],{"class":719},[709,878,724],{"class":723},[709,880,727],{"class":719},[709,882,730],{"class":715},[709,884,733],{"class":719},[709,886,737],{"class":736},[709,888,740],{"class":719},[709,890,891],{"class":711,"line":750},[709,892,747],{"emptyLinePlaceholder":746},[709,894,895,897,899,901,903,905,907,909],{"class":711,"line":828},[709,896,803],{"class":715},[709,898,806],{"class":715},[709,900,859],{"class":756},[709,902,812],{"class":723},[709,904,816],{"class":815},[709,906,819],{"class":719},[709,908,822],{"class":815},[709,910,825],{"class":719},[709,912,913,915,917],{"class":711,"line":839},[709,914,831],{"class":715},[709,916,724],{"class":756},[709,918,759],{"class":836},[709,920,922,924],{"class":711,"line":921},6,[709,923,842],{"class":719},[709,925,845],{"class":723},[700,927,930],{"className":702,"code":928,"filename":255,"language":704,"meta":929,"style":705},"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",[628,931,932,952,956,991,1023,1049,1094,1099,1107,1120,1130,1139,1145,1154,1160],{"__ignoreMap":705},[709,933,934,936,938,941,943,945,947,950],{"class":711,"line":712},[709,935,716],{"class":715},[709,937,720],{"class":719},[709,939,940],{"class":723}," defineNodeInstrumentation",[709,942,727],{"class":719},[709,944,730],{"class":715},[709,946,733],{"class":719},[709,948,949],{"class":736},"evlog\u002Fnext\u002Finstrumentation",[709,951,740],{"class":719},[709,953,954],{"class":711,"line":743},[709,955,747],{"emptyLinePlaceholder":746},[709,957,958,960,963,965,968,971,974,976,979,981,983,985,987,989],{"class":711,"line":750},[709,959,803],{"class":715},[709,961,962],{"class":815}," const",[709,964,720],{"class":719},[709,966,967],{"class":723}," register",[709,969,970],{"class":719},",",[709,972,973],{"class":723}," onRequestError ",[709,975,842],{"class":719},[709,977,978],{"class":719}," =",[709,980,940],{"class":756},[709,982,812],{"class":723},[709,984,816],{"class":815},[709,986,819],{"class":719},[709,988,822],{"class":815},[709,990,825],{"class":719},[709,992,993,996,998,1001,1003,1005,1008,1011,1013,1016,1019,1021],{"class":711,"line":828},[709,994,995],{"class":815},"  const",[709,997,720],{"class":719},[709,999,1000],{"class":723}," createInstrumentation",[709,1002,727],{"class":719},[709,1004,978],{"class":719},[709,1006,1007],{"class":715}," await",[709,1009,1010],{"class":719}," import",[709,1012,812],{"class":836},[709,1014,1015],{"class":719},"'",[709,1017,1018],{"class":736},"evlog\u002Fnext\u002Finstrumentation\u002Fcreate",[709,1020,1015],{"class":719},[709,1022,845],{"class":836},[709,1024,1025,1027,1029,1031,1033,1035,1037,1039,1041,1043,1045,1047],{"class":711,"line":839},[709,1026,995],{"class":815},[709,1028,720],{"class":719},[709,1030,724],{"class":723},[709,1032,727],{"class":719},[709,1034,978],{"class":719},[709,1036,1007],{"class":715},[709,1038,1010],{"class":719},[709,1040,812],{"class":836},[709,1042,1015],{"class":719},[709,1044,737],{"class":736},[709,1046,1015],{"class":719},[709,1048,845],{"class":836},[709,1050,1051,1053,1055,1057,1059,1062,1064,1067,1069,1071,1073,1075,1078,1081,1083,1085,1088,1090,1092],{"class":711,"line":921},[709,1052,995],{"class":815},[709,1054,720],{"class":719},[709,1056,967],{"class":836},[709,1058,655],{"class":719},[709,1060,1061],{"class":723}," evlogRegister",[709,1063,970],{"class":719},[709,1065,1066],{"class":723}," onRequestError",[709,1068,727],{"class":719},[709,1070,978],{"class":719},[709,1072,1000],{"class":756},[709,1074,812],{"class":836},[709,1076,1077],{"class":719},"{",[709,1079,1080],{"class":836}," service",[709,1082,655],{"class":719},[709,1084,733],{"class":719},[709,1086,1087],{"class":736},"my-app",[709,1089,1015],{"class":719},[709,1091,727],{"class":719},[709,1093,845],{"class":836},[709,1095,1097],{"class":711,"line":1096},7,[709,1098,747],{"emptyLinePlaceholder":746},[709,1100,1102,1105],{"class":711,"line":1101},8,[709,1103,1104],{"class":715},"  return",[709,1106,825],{"class":719},[709,1108,1110,1113,1115,1118],{"class":711,"line":1109},9,[709,1111,1112],{"class":815},"    async",[709,1114,967],{"class":836},[709,1116,1117],{"class":719},"()",[709,1119,825],{"class":719},[709,1121,1123,1126,1128],{"class":711,"line":1122},10,[709,1124,1125],{"class":715},"      await",[709,1127,1061],{"class":756},[709,1129,759],{"class":836},[709,1131,1133,1135,1137],{"class":711,"line":1132},11,[709,1134,1125],{"class":715},[709,1136,724],{"class":756},[709,1138,759],{"class":836},[709,1140,1142],{"class":711,"line":1141},12,[709,1143,1144],{"class":719},"    },\n",[709,1146,1148,1151],{"class":711,"line":1147},13,[709,1149,1150],{"class":723},"    onRequestError",[709,1152,1153],{"class":719},",\n",[709,1155,1157],{"class":711,"line":1156},14,[709,1158,1159],{"class":719},"  }\n",[709,1161,1163,1165],{"class":711,"line":1162},15,[709,1164,842],{"class":719},[709,1166,845],{"class":723},[700,1168,1171],{"className":702,"code":1169,"filename":260,"language":704,"meta":1170,"style":705},"import { createEvlogHooks } from 'evlog\u002Fsveltekit'\nimport { enableDiagnosticsChannel } from 'evlog\u002Fdiagnostics'\n\nawait enableDiagnosticsChannel()\n\nexport const { handle, handleError } = createEvlogHooks()\n","src\u002Fhooks.server.ts",[628,1172,1173,1193,1211,1215,1223,1227],{"__ignoreMap":705},[709,1174,1175,1177,1179,1182,1184,1186,1188,1191],{"class":711,"line":712},[709,1176,716],{"class":715},[709,1178,720],{"class":719},[709,1180,1181],{"class":723}," createEvlogHooks",[709,1183,727],{"class":719},[709,1185,730],{"class":715},[709,1187,733],{"class":719},[709,1189,1190],{"class":736},"evlog\u002Fsveltekit",[709,1192,740],{"class":719},[709,1194,1195,1197,1199,1201,1203,1205,1207,1209],{"class":711,"line":743},[709,1196,716],{"class":715},[709,1198,720],{"class":719},[709,1200,724],{"class":723},[709,1202,727],{"class":719},[709,1204,730],{"class":715},[709,1206,733],{"class":719},[709,1208,737],{"class":736},[709,1210,740],{"class":719},[709,1212,1213],{"class":711,"line":750},[709,1214,747],{"emptyLinePlaceholder":746},[709,1216,1217,1219,1221],{"class":711,"line":828},[709,1218,753],{"class":715},[709,1220,724],{"class":756},[709,1222,759],{"class":723},[709,1224,1225],{"class":711,"line":839},[709,1226,747],{"emptyLinePlaceholder":746},[709,1228,1229,1231,1233,1235,1238,1240,1243,1245,1247,1249],{"class":711,"line":921},[709,1230,803],{"class":715},[709,1232,962],{"class":815},[709,1234,720],{"class":719},[709,1236,1237],{"class":723}," handle",[709,1239,970],{"class":719},[709,1241,1242],{"class":723}," handleError ",[709,1244,842],{"class":719},[709,1246,978],{"class":719},[709,1248,1181],{"class":756},[709,1250,759],{"class":723},[700,1252,1255],{"className":702,"code":1253,"filename":285,"language":704,"meta":1254,"style":705},"\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",[628,1256,1257,1263,1268,1288,1308,1326,1330,1338,1342,1360],{"__ignoreMap":705},[709,1258,1259],{"class":711,"line":712},[709,1260,1262],{"class":1261},"sHwdD","\u002F\u002F Same shape for Express, Fastify, Elysia, NestJS and oRPC:\n",[709,1264,1265],{"class":711,"line":743},[709,1266,1267],{"class":1261},"\u002F\u002F enable once in the server entry, before the app starts serving.\n",[709,1269,1270,1272,1274,1277,1279,1281,1283,1286],{"class":711,"line":750},[709,1271,716],{"class":715},[709,1273,720],{"class":719},[709,1275,1276],{"class":723}," Hono",[709,1278,727],{"class":719},[709,1280,730],{"class":715},[709,1282,733],{"class":719},[709,1284,1285],{"class":736},"hono",[709,1287,740],{"class":719},[709,1289,1290,1292,1294,1297,1299,1301,1303,1306],{"class":711,"line":828},[709,1291,716],{"class":715},[709,1293,720],{"class":719},[709,1295,1296],{"class":723}," evlog",[709,1298,727],{"class":719},[709,1300,730],{"class":715},[709,1302,733],{"class":719},[709,1304,1305],{"class":736},"evlog\u002Fhono",[709,1307,740],{"class":719},[709,1309,1310,1312,1314,1316,1318,1320,1322,1324],{"class":711,"line":839},[709,1311,716],{"class":715},[709,1313,720],{"class":719},[709,1315,724],{"class":723},[709,1317,727],{"class":719},[709,1319,730],{"class":715},[709,1321,733],{"class":719},[709,1323,737],{"class":736},[709,1325,740],{"class":719},[709,1327,1328],{"class":711,"line":921},[709,1329,747],{"emptyLinePlaceholder":746},[709,1331,1332,1334,1336],{"class":711,"line":1096},[709,1333,753],{"class":715},[709,1335,724],{"class":756},[709,1337,759],{"class":723},[709,1339,1340],{"class":711,"line":1101},[709,1341,747],{"emptyLinePlaceholder":746},[709,1343,1344,1347,1350,1353,1356,1358],{"class":711,"line":1109},[709,1345,1346],{"class":815},"const",[709,1348,1349],{"class":723}," app ",[709,1351,1352],{"class":719},"=",[709,1354,1355],{"class":719}," new",[709,1357,1276],{"class":756},[709,1359,759],{"class":723},[709,1361,1362,1365,1367,1370,1372,1375],{"class":711,"line":1122},[709,1363,1364],{"class":723},"app",[709,1366,639],{"class":719},[709,1368,1369],{"class":756},"use",[709,1371,812],{"class":723},[709,1373,1374],{"class":756},"evlog",[709,1376,1377],{"class":723},"())\n",[700,1379,1382],{"className":702,"code":1380,"filename":305,"language":704,"meta":1381,"style":705},"\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",[628,1383,1384,1389,1414,1432,1436,1469,1477,1481,1521,1551,1580],{"__ignoreMap":705},[709,1385,1386],{"class":711,"line":712},[709,1387,1388],{"class":1261},"\u002F\u002F Needs the nodejs_compat flag\n",[709,1390,1391,1393,1395,1398,1400,1403,1405,1407,1409,1412],{"class":711,"line":743},[709,1392,716],{"class":715},[709,1394,720],{"class":719},[709,1396,1397],{"class":723}," initWorkersLogger",[709,1399,970],{"class":719},[709,1401,1402],{"class":723}," withEvlog",[709,1404,727],{"class":719},[709,1406,730],{"class":715},[709,1408,733],{"class":719},[709,1410,1411],{"class":736},"evlog\u002Fworkers",[709,1413,740],{"class":719},[709,1415,1416,1418,1420,1422,1424,1426,1428,1430],{"class":711,"line":750},[709,1417,716],{"class":715},[709,1419,720],{"class":719},[709,1421,724],{"class":723},[709,1423,727],{"class":719},[709,1425,730],{"class":715},[709,1427,733],{"class":719},[709,1429,737],{"class":736},[709,1431,740],{"class":719},[709,1433,1434],{"class":711,"line":828},[709,1435,747],{"emptyLinePlaceholder":746},[709,1437,1438,1441,1443,1445,1448,1450,1452,1454,1456,1458,1461,1463,1465,1467],{"class":711,"line":839},[709,1439,1440],{"class":756},"initWorkersLogger",[709,1442,812],{"class":723},[709,1444,1077],{"class":719},[709,1446,1447],{"class":836}," env",[709,1449,655],{"class":719},[709,1451,720],{"class":719},[709,1453,1080],{"class":836},[709,1455,655],{"class":719},[709,1457,733],{"class":719},[709,1459,1460],{"class":736},"my-worker",[709,1462,1015],{"class":719},[709,1464,727],{"class":719},[709,1466,727],{"class":719},[709,1468,845],{"class":723},[709,1470,1471,1473,1475],{"class":711,"line":921},[709,1472,753],{"class":715},[709,1474,724],{"class":756},[709,1476,759],{"class":723},[709,1478,1479],{"class":711,"line":1096},[709,1480,747],{"emptyLinePlaceholder":746},[709,1482,1483,1485,1487,1489,1491,1493,1496,1500,1502,1504,1506,1509,1511,1514,1517,1519],{"class":711,"line":1101},[709,1484,803],{"class":715},[709,1486,806],{"class":715},[709,1488,1402],{"class":756},[709,1490,812],{"class":723},[709,1492,816],{"class":815},[709,1494,1495],{"class":719}," (",[709,1497,1499],{"class":1498},"sHdIc","request",[709,1501,970],{"class":719},[709,1503,1447],{"class":1498},[709,1505,970],{"class":719},[709,1507,1508],{"class":1498}," ctx",[709,1510,970],{"class":719},[709,1512,1513],{"class":1498}," log",[709,1515,1516],{"class":719},")",[709,1518,822],{"class":815},[709,1520,825],{"class":719},[709,1522,1523,1526,1528,1531,1533,1535,1538,1540,1542,1545,1547,1549],{"class":711,"line":1109},[709,1524,1525],{"class":723},"  log",[709,1527,639],{"class":719},[709,1529,1530],{"class":756},"set",[709,1532,812],{"class":836},[709,1534,1077],{"class":719},[709,1536,1537],{"class":836}," action",[709,1539,655],{"class":719},[709,1541,733],{"class":719},[709,1543,1544],{"class":736},"handle_request",[709,1546,1015],{"class":719},[709,1548,727],{"class":719},[709,1550,845],{"class":836},[709,1552,1553,1555,1558,1560,1563,1565,1567,1570,1572,1576,1578],{"class":711,"line":1122},[709,1554,1104],{"class":715},[709,1556,1557],{"class":723}," Response",[709,1559,639],{"class":719},[709,1561,1562],{"class":756},"json",[709,1564,812],{"class":836},[709,1566,1077],{"class":719},[709,1568,1569],{"class":836}," ok",[709,1571,655],{"class":719},[709,1573,1575],{"class":1574},"sfNiH"," true",[709,1577,727],{"class":719},[709,1579,845],{"class":836},[709,1581,1582,1584],{"class":711,"line":1132},[709,1583,842],{"class":719},[709,1585,845],{"class":723},[700,1587,1589],{"className":702,"code":1588,"filename":310,"language":704,"meta":705,"style":705},"\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",[628,1590,1591,1596,1615,1633,1637,1669],{"__ignoreMap":705},[709,1592,1593],{"class":711,"line":712},[709,1594,1595],{"class":1261},"\u002F\u002F Any Node, Bun or Deno entry point\n",[709,1597,1598,1600,1602,1605,1607,1609,1611,1613],{"class":711,"line":743},[709,1599,716],{"class":715},[709,1601,720],{"class":719},[709,1603,1604],{"class":723}," initLogger",[709,1606,727],{"class":719},[709,1608,730],{"class":715},[709,1610,733],{"class":719},[709,1612,1374],{"class":736},[709,1614,740],{"class":719},[709,1616,1617,1619,1621,1623,1625,1627,1629,1631],{"class":711,"line":750},[709,1618,716],{"class":715},[709,1620,720],{"class":719},[709,1622,724],{"class":723},[709,1624,727],{"class":719},[709,1626,730],{"class":715},[709,1628,733],{"class":719},[709,1630,737],{"class":736},[709,1632,740],{"class":719},[709,1634,1635],{"class":711,"line":828},[709,1636,747],{"emptyLinePlaceholder":746},[709,1638,1639,1642,1644,1646,1648,1650,1652,1654,1656,1658,1661,1663,1665,1667],{"class":711,"line":839},[709,1640,1641],{"class":756},"initLogger",[709,1643,812],{"class":723},[709,1645,1077],{"class":719},[709,1647,1447],{"class":836},[709,1649,655],{"class":719},[709,1651,720],{"class":719},[709,1653,1080],{"class":836},[709,1655,655],{"class":719},[709,1657,733],{"class":719},[709,1659,1660],{"class":736},"worker",[709,1662,1015],{"class":719},[709,1664,727],{"class":719},[709,1666,727],{"class":719},[709,1668,845],{"class":723},[709,1670,1671,1673,1675],{"class":711,"line":921},[709,1672,753],{"class":715},[709,1674,724],{"class":756},[709,1676,759],{"class":723},[619,1678,1679,1682,1683,1685,1686,1688,1689,1691],{},[628,1680,1681],{},"enableDiagnosticsChannel()"," is async because it loads ",[628,1684,630],{}," 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 ",[628,1687,753],{}," should call it from the same place they call ",[628,1690,638],{},", and await it there.",[1693,1694,1696,1697,1699,1700,1702],"callout",{"color":1695,"icon":13},"info","This is an observation side channel, not a transport. Subscribers run synchronously and are not awaited: no batching, no retry, no ",[628,1698,683],{},". For delivery to a backend, use a ",[622,1701,654],{"href":540},"; both see the same event.",[641,1704,1706],{"id":1705},"subscribing","Subscribing",[619,1708,1709],{},"The point of the channel is that a consumer needs nothing from evlog but the channel name:",[700,1711,1714],{"className":702,"code":1712,"filename":1713,"language":704,"meta":705,"style":705},"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",[628,1715,1716,1735,1739,1744,1806,1810,1842,1863,1933],{"__ignoreMap":705},[709,1717,1718,1720,1722,1725,1727,1729,1731,1733],{"class":711,"line":712},[709,1719,716],{"class":715},[709,1721,720],{"class":719},[709,1723,1724],{"class":723}," channel",[709,1726,727],{"class":719},[709,1728,730],{"class":715},[709,1730,733],{"class":719},[709,1732,630],{"class":736},[709,1734,740],{"class":719},[709,1736,1737],{"class":711,"line":743},[709,1738,747],{"emptyLinePlaceholder":746},[709,1740,1741],{"class":711,"line":750},[709,1742,1743],{"class":1261},"\u002F** The published message. Declared locally so this file needs no evlog import. *\u002F\n",[709,1745,1746,1749,1753,1755,1757,1760,1762,1765,1768,1771,1773,1776,1779,1782,1784,1787,1789,1792,1795,1797,1799,1801,1803],{"class":711,"line":828},[709,1747,1748],{"class":815},"type",[709,1750,1752],{"class":1751},"sBMFI"," EvlogMessage",[709,1754,978],{"class":719},[709,1756,720],{"class":719},[709,1758,1759],{"class":836}," event",[709,1761,655],{"class":719},[709,1763,1764],{"class":1751}," Record",[709,1766,1767],{"class":719},"\u003C",[709,1769,1770],{"class":1751},"string",[709,1772,970],{"class":719},[709,1774,1775],{"class":1751}," unknown",[709,1777,1778],{"class":719},">",[709,1780,1781],{"class":719}," &",[709,1783,720],{"class":719},[709,1785,1786],{"class":836}," level",[709,1788,655],{"class":719},[709,1790,1791],{"class":1751}," string",[709,1793,1794],{"class":719},";",[709,1796,1080],{"class":836},[709,1798,655],{"class":719},[709,1800,1791],{"class":1751},[709,1802,727],{"class":719},[709,1804,1805],{"class":719}," }\n",[709,1807,1808],{"class":711,"line":839},[709,1809,747],{"emptyLinePlaceholder":746},[709,1811,1812,1815,1817,1819,1821,1823,1826,1829,1831,1833,1836,1838,1840],{"class":711,"line":921},[709,1813,1814],{"class":1751},"channel",[709,1816,812],{"class":723},[709,1818,1015],{"class":719},[709,1820,634],{"class":736},[709,1822,1015],{"class":719},[709,1824,1825],{"class":723},").",[709,1827,1828],{"class":1751},"subscribe",[709,1830,812],{"class":723},[709,1832,812],{"class":719},[709,1834,1835],{"class":1498},"message",[709,1837,1516],{"class":719},[709,1839,822],{"class":815},[709,1841,825],{"class":719},[709,1843,1844,1846,1848,1850,1852,1855,1857,1860],{"class":711,"line":1096},[709,1845,995],{"class":1751},[709,1847,720],{"class":719},[709,1849,1759],{"class":836},[709,1851,727],{"class":719},[709,1853,1854],{"class":723}," = ",[709,1856,1835],{"class":1751},[709,1858,1859],{"class":1751}," as",[709,1861,1862],{"class":836}," EvlogMessage\n",[709,1864,1865,1868,1870,1873,1875,1878,1880,1882,1885,1888,1890,1892,1895,1897,1899,1901,1904,1906,1909,1912,1914,1917,1920,1922,1925,1927,1930],{"class":711,"line":1101},[709,1866,1867],{"class":836},"  if",[709,1869,1495],{"class":719},[709,1871,1872],{"class":723},"event.level === ",[709,1874,1015],{"class":719},[709,1876,1877],{"class":736},"error",[709,1879,1015],{"class":719},[709,1881,1516],{"class":719},[709,1883,1884],{"class":723}," metrics.",[709,1886,1887],{"class":836},"increment",[709,1889,812],{"class":719},[709,1891,1015],{"class":719},[709,1893,1894],{"class":736},"errors",[709,1896,1015],{"class":719},[709,1898,970],{"class":719},[709,1900,720],{"class":719},[709,1902,1903],{"class":836}," path",[709,1905,655],{"class":719},[709,1907,1908],{"class":1498}," String",[709,1910,1911],{"class":723},"(event",[709,1913,639],{"class":719},[709,1915,1916],{"class":723},"path ",[709,1918,1919],{"class":719},"??",[709,1921,733],{"class":719},[709,1923,1924],{"class":736},"unknown",[709,1926,1015],{"class":719},[709,1928,1929],{"class":723},") ",[709,1931,1932],{"class":719},"})\n",[709,1934,1935,1937],{"class":711,"line":1109},[709,1936,842],{"class":719},[709,1938,845],{"class":723},[619,1940,1941,1942,1944,1945,1948,1949,1952],{},"Node types the published message as ",[628,1943,1924],{},", so narrow it once at the top of your handler. ",[628,1946,1947],{},"channel(name).subscribe()"," is used rather than the module-level ",[628,1950,1951],{},"subscribe()"," because it exists on every Node that evlog supports.",[619,1954,1955],{},"If you already depend on evlog and want the payload typed:",[700,1957,1960],{"className":702,"code":1958,"filename":1959,"language":704,"meta":705,"style":705},"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",[628,1961,1962,1981,1985,2011,2016,2063,2136,2140],{"__ignoreMap":705},[709,1963,1964,1966,1968,1971,1973,1975,1977,1979],{"class":711,"line":712},[709,1965,716],{"class":715},[709,1967,720],{"class":719},[709,1969,1970],{"class":723}," subscribeToWideEvents",[709,1972,727],{"class":719},[709,1974,730],{"class":715},[709,1976,733],{"class":719},[709,1978,737],{"class":736},[709,1980,740],{"class":719},[709,1982,1983],{"class":711,"line":743},[709,1984,747],{"emptyLinePlaceholder":746},[709,1986,1987,1989,1992,1994,1996,1998,2000,2002,2005,2007,2009],{"class":711,"line":750},[709,1988,1346],{"class":815},[709,1990,1991],{"class":723}," stop ",[709,1993,1352],{"class":719},[709,1995,1007],{"class":715},[709,1997,1970],{"class":756},[709,1999,812],{"class":723},[709,2001,812],{"class":719},[709,2003,2004],{"class":1498},"event",[709,2006,1516],{"class":719},[709,2008,822],{"class":815},[709,2010,825],{"class":719},[709,2012,2013],{"class":711,"line":828},[709,2014,2015],{"class":1261},"  \u002F\u002F                                       ^? WideEvent\n",[709,2017,2018,2020,2022,2025,2027,2029,2032,2035,2037,2040,2042,2045,2047,2049,2051,2054,2058,2060],{"class":711,"line":839},[709,2019,1867],{"class":715},[709,2021,1495],{"class":836},[709,2023,2024],{"class":719},"typeof",[709,2026,1759],{"class":723},[709,2028,639],{"class":719},[709,2030,2031],{"class":723},"status",[709,2033,2034],{"class":719}," ===",[709,2036,733],{"class":719},[709,2038,2039],{"class":736},"number",[709,2041,1015],{"class":719},[709,2043,2044],{"class":719}," &&",[709,2046,1759],{"class":723},[709,2048,639],{"class":719},[709,2050,2031],{"class":723},[709,2052,2053],{"class":719}," >=",[709,2055,2057],{"class":2056},"sbssI"," 500",[709,2059,1929],{"class":836},[709,2061,2062],{"class":719},"{\n",[709,2064,2065,2068,2070,2073,2075,2077,2079,2081,2083,2085,2087,2089,2092,2095,2097,2100,2102,2104,2106,2109,2111,2113,2115,2117,2119,2122,2124,2126,2128,2130,2132,2134],{"class":711,"line":921},[709,2066,2067],{"class":723},"    alerts",[709,2069,639],{"class":719},[709,2071,2072],{"class":756},"push",[709,2074,812],{"class":836},[709,2076,1077],{"class":719},[709,2078,1903],{"class":836},[709,2080,655],{"class":719},[709,2082,1908],{"class":756},[709,2084,812],{"class":836},[709,2086,2004],{"class":723},[709,2088,639],{"class":719},[709,2090,2091],{"class":723},"path",[709,2093,2094],{"class":719}," ??",[709,2096,733],{"class":719},[709,2098,2099],{"class":736},"-",[709,2101,1015],{"class":719},[709,2103,1516],{"class":836},[709,2105,970],{"class":719},[709,2107,2108],{"class":836}," requestId",[709,2110,655],{"class":719},[709,2112,1908],{"class":756},[709,2114,812],{"class":836},[709,2116,2004],{"class":723},[709,2118,639],{"class":719},[709,2120,2121],{"class":723},"requestId",[709,2123,2094],{"class":719},[709,2125,733],{"class":719},[709,2127,2099],{"class":736},[709,2129,1015],{"class":719},[709,2131,1929],{"class":836},[709,2133,842],{"class":719},[709,2135,845],{"class":836},[709,2137,2138],{"class":711,"line":1096},[709,2139,1159],{"class":719},[709,2141,2142,2144],{"class":711,"line":1101},[709,2143,842],{"class":719},[709,2145,845],{"class":723},[619,2147,2148,2149,2152,2153,2155],{},"Fields beyond the ",[622,2150,2151],{"href":52},"base event"," are typed ",[628,2154,1924],{},", and events emitted outside a request carry no HTTP fields at all, so narrow before using them rather than casting.",[641,2157,2159],{"id":2158},"what-a-subscriber-receives","What a subscriber receives",[619,2161,2162],{},"The same object a drain receives: post-audit, post-redaction, post-enrich. Requests carry everything enrichers added: geo, user agent, trace context:",[700,2164,2167],{"className":2165,"code":2166,"language":1562,"meta":705,"style":705},"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",[628,2168,2169,2173,2196,2215,2235,2255,2275,2294,2308,2328,2347,2397,2444],{"__ignoreMap":705},[709,2170,2171],{"class":711,"line":712},[709,2172,2062],{"class":719},[709,2174,2175,2178,2181,2184,2186,2189,2192,2194],{"class":711,"line":743},[709,2176,2177],{"class":719},"  \"",[709,2179,2180],{"class":815},"timestamp",[709,2182,2183],{"class":719},"\"",[709,2185,655],{"class":719},[709,2187,2188],{"class":719}," \"",[709,2190,2191],{"class":736},"2026-08-02T10:23:45.612Z",[709,2193,2183],{"class":719},[709,2195,1153],{"class":719},[709,2197,2198,2200,2203,2205,2207,2209,2211,2213],{"class":711,"line":750},[709,2199,2177],{"class":719},[709,2201,2202],{"class":815},"level",[709,2204,2183],{"class":719},[709,2206,655],{"class":719},[709,2208,2188],{"class":719},[709,2210,1877],{"class":736},[709,2212,2183],{"class":719},[709,2214,1153],{"class":719},[709,2216,2217,2219,2222,2224,2226,2228,2231,2233],{"class":711,"line":828},[709,2218,2177],{"class":719},[709,2220,2221],{"class":815},"service",[709,2223,2183],{"class":719},[709,2225,655],{"class":719},[709,2227,2188],{"class":719},[709,2229,2230],{"class":736},"checkout",[709,2232,2183],{"class":719},[709,2234,1153],{"class":719},[709,2236,2237,2239,2242,2244,2246,2248,2251,2253],{"class":711,"line":839},[709,2238,2177],{"class":719},[709,2240,2241],{"class":815},"environment",[709,2243,2183],{"class":719},[709,2245,655],{"class":719},[709,2247,2188],{"class":719},[709,2249,2250],{"class":736},"production",[709,2252,2183],{"class":719},[709,2254,1153],{"class":719},[709,2256,2257,2259,2262,2264,2266,2268,2271,2273],{"class":711,"line":921},[709,2258,2177],{"class":719},[709,2260,2261],{"class":815},"method",[709,2263,2183],{"class":719},[709,2265,655],{"class":719},[709,2267,2188],{"class":719},[709,2269,2270],{"class":736},"POST",[709,2272,2183],{"class":719},[709,2274,1153],{"class":719},[709,2276,2277,2279,2281,2283,2285,2287,2290,2292],{"class":711,"line":1096},[709,2278,2177],{"class":719},[709,2280,2091],{"class":815},[709,2282,2183],{"class":719},[709,2284,655],{"class":719},[709,2286,2188],{"class":719},[709,2288,2289],{"class":736},"\u002Fapi\u002Fcheckout",[709,2291,2183],{"class":719},[709,2293,1153],{"class":719},[709,2295,2296,2298,2300,2302,2304,2306],{"class":711,"line":1101},[709,2297,2177],{"class":719},[709,2299,2031],{"class":815},[709,2301,2183],{"class":719},[709,2303,655],{"class":719},[709,2305,2057],{"class":2056},[709,2307,1153],{"class":719},[709,2309,2310,2312,2315,2317,2319,2321,2324,2326],{"class":711,"line":1109},[709,2311,2177],{"class":719},[709,2313,2314],{"class":815},"duration",[709,2316,2183],{"class":719},[709,2318,655],{"class":719},[709,2320,2188],{"class":719},[709,2322,2323],{"class":736},"1.20s",[709,2325,2183],{"class":719},[709,2327,1153],{"class":719},[709,2329,2330,2332,2334,2336,2338,2340,2343,2345],{"class":711,"line":1122},[709,2331,2177],{"class":719},[709,2333,2121],{"class":815},[709,2335,2183],{"class":719},[709,2337,655],{"class":719},[709,2339,2188],{"class":719},[709,2341,2342],{"class":736},"4a8ff3a8-...",[709,2344,2183],{"class":719},[709,2346,1153],{"class":719},[709,2348,2349,2351,2354,2356,2358,2360,2362,2365,2367,2369,2371,2374,2376,2378,2380,2383,2385,2387,2389,2392,2394],{"class":711,"line":1132},[709,2350,2177],{"class":719},[709,2352,2353],{"class":815},"user",[709,2355,2183],{"class":719},[709,2357,655],{"class":719},[709,2359,720],{"class":719},[709,2361,2188],{"class":719},[709,2363,2364],{"class":1751},"id",[709,2366,2183],{"class":719},[709,2368,655],{"class":719},[709,2370,2188],{"class":719},[709,2372,2373],{"class":736},"usr_123",[709,2375,2183],{"class":719},[709,2377,970],{"class":719},[709,2379,2188],{"class":719},[709,2381,2382],{"class":1751},"plan",[709,2384,2183],{"class":719},[709,2386,655],{"class":719},[709,2388,2188],{"class":719},[709,2390,2391],{"class":736},"premium",[709,2393,2183],{"class":719},[709,2395,2396],{"class":719}," },\n",[709,2398,2399,2401,2403,2405,2407,2409,2411,2414,2416,2418,2420,2423,2425,2427,2429,2431,2433,2435,2437,2440,2442],{"class":711,"line":1141},[709,2400,2177],{"class":719},[709,2402,1877],{"class":815},[709,2404,2183],{"class":719},[709,2406,655],{"class":719},[709,2408,720],{"class":719},[709,2410,2188],{"class":719},[709,2412,2413],{"class":1751},"name",[709,2415,2183],{"class":719},[709,2417,655],{"class":719},[709,2419,2188],{"class":719},[709,2421,2422],{"class":736},"PaymentDeclined",[709,2424,2183],{"class":719},[709,2426,970],{"class":719},[709,2428,2188],{"class":719},[709,2430,1835],{"class":1751},[709,2432,2183],{"class":719},[709,2434,655],{"class":719},[709,2436,2188],{"class":719},[709,2438,2439],{"class":736},"Card declined",[709,2441,2183],{"class":719},[709,2443,1805],{"class":719},[709,2445,2446],{"class":711,"line":1147},[709,2447,2448],{"class":719},"}\n",[619,2450,2451,2452,2455,2456,2459,2460,2463,2464,2467,2468,639],{},"Events emitted outside a request (",[628,2453,2454],{},"log.info({ ... })",", ",[628,2457,2458],{},"createLogger().emit()",") arrive without the HTTP fields, and events from ",[628,2461,2462],{},"log.fork()"," carry ",[628,2465,2466],{},"operation"," and ",[628,2469,2470],{},"_parentRequestId",[1693,2472,2475,2476,2479,2480,2483],{"color":2473,"icon":2474},"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 ",[663,2477,2478],{},"not"," contained: ",[628,2481,2482],{},"Channel.publish()"," re-raises it as an uncaught exception on the next tick, which is fatal in most apps. Keep subscribers total.",[619,2485,2486,2487,2490],{},"In pretty mode (the dev default), tagged logs like ",[628,2488,2489],{},"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.",[641,2492,2494],{"id":2493},"what-you-can-build","What you can build",[2496,2497,2499],"h3",{"id":2498},"an-integration-that-does-not-depend-on-evlog","An integration that does not depend on evlog",[619,2501,2502,2503,2505],{},"A package that subscribes needs the channel name and nothing else: no ",[628,2504,1374],{}," dependency, no peer range to keep in sync, no wiring in the host app beyond importing it:",[700,2507,2510],{"className":702,"code":2508,"filename":2509,"language":704,"meta":705,"style":705},"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",[628,2511,2512,2530,2534,2544,2592,2596,2600,2628,2646,2650,2664,2679,2694,2709,2720,2727],{"__ignoreMap":705},[709,2513,2514,2516,2518,2520,2522,2524,2526,2528],{"class":711,"line":712},[709,2515,716],{"class":715},[709,2517,720],{"class":719},[709,2519,1724],{"class":723},[709,2521,727],{"class":719},[709,2523,730],{"class":715},[709,2525,733],{"class":719},[709,2527,630],{"class":736},[709,2529,740],{"class":719},[709,2531,2532],{"class":711,"line":743},[709,2533,747],{"emptyLinePlaceholder":746},[709,2535,2536,2538,2540,2542],{"class":711,"line":750},[709,2537,1748],{"class":815},[709,2539,1752],{"class":1751},[709,2541,978],{"class":719},[709,2543,825],{"class":719},[709,2545,2546,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2570,2572,2574,2576,2578,2580,2582,2584,2586,2588,2590],{"class":711,"line":828},[709,2547,2548],{"class":836},"  event",[709,2550,655],{"class":719},[709,2552,1764],{"class":1751},[709,2554,1767],{"class":719},[709,2556,1770],{"class":1751},[709,2558,970],{"class":719},[709,2560,1775],{"class":1751},[709,2562,1778],{"class":719},[709,2564,1781],{"class":719},[709,2566,720],{"class":719},[709,2568,2569],{"class":836}," timestamp",[709,2571,655],{"class":719},[709,2573,1791],{"class":1751},[709,2575,1794],{"class":719},[709,2577,1786],{"class":836},[709,2579,655],{"class":719},[709,2581,1791],{"class":1751},[709,2583,1794],{"class":719},[709,2585,1080],{"class":836},[709,2587,655],{"class":719},[709,2589,1791],{"class":1751},[709,2591,1805],{"class":719},[709,2593,2594],{"class":711,"line":839},[709,2595,2448],{"class":719},[709,2597,2598],{"class":711,"line":921},[709,2599,747],{"emptyLinePlaceholder":746},[709,2601,2602,2604,2606,2608,2610,2612,2614,2616,2618,2620,2622,2624,2626],{"class":711,"line":1096},[709,2603,1814],{"class":1751},[709,2605,812],{"class":723},[709,2607,1015],{"class":719},[709,2609,634],{"class":736},[709,2611,1015],{"class":719},[709,2613,1825],{"class":723},[709,2615,1828],{"class":1751},[709,2617,812],{"class":723},[709,2619,812],{"class":719},[709,2621,1835],{"class":1498},[709,2623,1516],{"class":719},[709,2625,822],{"class":815},[709,2627,825],{"class":719},[709,2629,2630,2632,2634,2636,2638,2640,2642,2644],{"class":711,"line":1101},[709,2631,995],{"class":1751},[709,2633,720],{"class":719},[709,2635,1759],{"class":836},[709,2637,727],{"class":719},[709,2639,1854],{"class":723},[709,2641,1835],{"class":1751},[709,2643,1859],{"class":1751},[709,2645,1862],{"class":836},[709,2647,2648],{"class":711,"line":1109},[709,2649,747],{"emptyLinePlaceholder":746},[709,2651,2652,2655,2657,2660,2662],{"class":711,"line":1122},[709,2653,2654],{"class":1751},"  acme",[709,2656,639],{"class":719},[709,2658,2659],{"class":1751},"ingest",[709,2661,812],{"class":723},[709,2663,2062],{"class":719},[709,2665,2666,2669,2671,2673,2675,2677],{"class":711,"line":1132},[709,2667,2668],{"class":836},"    at",[709,2670,655],{"class":719},[709,2672,1759],{"class":1751},[709,2674,639],{"class":719},[709,2676,2180],{"class":1751},[709,2678,1153],{"class":719},[709,2680,2681,2684,2686,2688,2690,2692],{"class":711,"line":1141},[709,2682,2683],{"class":836},"    level",[709,2685,655],{"class":719},[709,2687,1759],{"class":1751},[709,2689,639],{"class":719},[709,2691,2202],{"class":1751},[709,2693,1153],{"class":719},[709,2695,2696,2699,2701,2703,2705,2707],{"class":711,"line":1147},[709,2697,2698],{"class":836},"    service",[709,2700,655],{"class":719},[709,2702,1759],{"class":1751},[709,2704,639],{"class":719},[709,2706,2221],{"class":1751},[709,2708,1153],{"class":719},[709,2710,2711,2714,2716,2718],{"class":711,"line":1156},[709,2712,2713],{"class":836},"    attributes",[709,2715,655],{"class":719},[709,2717,1759],{"class":1751},[709,2719,1153],{"class":719},[709,2721,2722,2725],{"class":711,"line":1162},[709,2723,2724],{"class":719},"  }",[709,2726,845],{"class":723},[709,2728,2730,2732],{"class":711,"line":2729},16,[709,2731,842],{"class":719},[709,2733,845],{"class":723},[700,2735,2738],{"className":702,"code":2736,"filename":2737,"language":704,"meta":705,"style":705},"import 'acme-apm\u002Fevlog'\n","the host app",[628,2739,2740],{"__ignoreMap":705},[709,2741,2742,2744,2746,2749],{"class":711,"line":712},[709,2743,716],{"class":715},[709,2745,733],{"class":719},[709,2747,2748],{"class":736},"acme-apm\u002Fevlog",[709,2750,740],{"class":719},[619,2752,2753,2754,639],{},"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 ",[628,2755,638],{},[2496,2757,2759],{"id":2758},"counters-and-alerts-next-to-your-app","Counters and alerts next to your app",[619,2761,2762],{},"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:",[700,2764,2767],{"className":702,"code":2765,"filename":2766,"language":704,"meta":705,"style":705},"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",[628,2768,2769,2787,2791,2818,2822,2852,2901,2927,2931,2959,3005,3009,3047,3094,3098,3104,3108,3136,3155],{"__ignoreMap":705},[709,2770,2771,2773,2775,2777,2779,2781,2783,2785],{"class":711,"line":712},[709,2772,716],{"class":715},[709,2774,720],{"class":719},[709,2776,1724],{"class":723},[709,2778,727],{"class":719},[709,2780,730],{"class":715},[709,2782,733],{"class":719},[709,2784,630],{"class":736},[709,2786,740],{"class":719},[709,2788,2789],{"class":711,"line":743},[709,2790,747],{"emptyLinePlaceholder":746},[709,2792,2793,2795,2798,2800,2802,2805,2807,2809,2811,2814,2816],{"class":711,"line":750},[709,2794,1346],{"class":815},[709,2796,2797],{"class":723}," errorsByPath ",[709,2799,1352],{"class":719},[709,2801,1355],{"class":719},[709,2803,2804],{"class":756}," Map",[709,2806,1767],{"class":719},[709,2808,1770],{"class":1751},[709,2810,970],{"class":719},[709,2812,2813],{"class":1751}," number",[709,2815,1778],{"class":719},[709,2817,759],{"class":723},[709,2819,2820],{"class":711,"line":828},[709,2821,747],{"emptyLinePlaceholder":746},[709,2823,2824,2826,2828,2830,2832,2834,2836,2838,2840,2842,2844,2846,2848,2850],{"class":711,"line":839},[709,2825,1814],{"class":756},[709,2827,812],{"class":723},[709,2829,1015],{"class":719},[709,2831,634],{"class":736},[709,2833,1015],{"class":719},[709,2835,1516],{"class":723},[709,2837,639],{"class":719},[709,2839,1828],{"class":756},[709,2841,812],{"class":723},[709,2843,812],{"class":719},[709,2845,1835],{"class":1498},[709,2847,1516],{"class":719},[709,2849,822],{"class":815},[709,2851,825],{"class":719},[709,2853,2854,2856,2858,2860,2862,2864,2867,2869,2871,2873,2875,2877,2879,2881,2883,2885,2887,2889,2891,2893,2895,2897,2899],{"class":711,"line":921},[709,2855,995],{"class":815},[709,2857,720],{"class":719},[709,2859,1759],{"class":723},[709,2861,727],{"class":719},[709,2863,978],{"class":719},[709,2865,2866],{"class":723}," message",[709,2868,1859],{"class":715},[709,2870,720],{"class":719},[709,2872,1759],{"class":836},[709,2874,655],{"class":719},[709,2876,1764],{"class":1751},[709,2878,1767],{"class":719},[709,2880,1770],{"class":1751},[709,2882,970],{"class":719},[709,2884,1775],{"class":1751},[709,2886,1778],{"class":719},[709,2888,1781],{"class":719},[709,2890,720],{"class":719},[709,2892,1786],{"class":836},[709,2894,655],{"class":719},[709,2896,1791],{"class":1751},[709,2898,727],{"class":719},[709,2900,1805],{"class":719},[709,2902,2903,2905,2907,2909,2911,2913,2916,2918,2920,2922,2924],{"class":711,"line":1096},[709,2904,1867],{"class":715},[709,2906,1495],{"class":836},[709,2908,2004],{"class":723},[709,2910,639],{"class":719},[709,2912,2202],{"class":723},[709,2914,2915],{"class":719}," !==",[709,2917,733],{"class":719},[709,2919,1877],{"class":736},[709,2921,1015],{"class":719},[709,2923,1929],{"class":836},[709,2925,2926],{"class":715},"return\n",[709,2928,2929],{"class":711,"line":1101},[709,2930,747],{"emptyLinePlaceholder":746},[709,2932,2933,2935,2937,2939,2941,2943,2945,2947,2949,2951,2953,2955,2957],{"class":711,"line":1109},[709,2934,995],{"class":815},[709,2936,1903],{"class":723},[709,2938,978],{"class":719},[709,2940,1908],{"class":756},[709,2942,812],{"class":836},[709,2944,2004],{"class":723},[709,2946,639],{"class":719},[709,2948,2091],{"class":723},[709,2950,2094],{"class":719},[709,2952,733],{"class":719},[709,2954,1924],{"class":736},[709,2956,1015],{"class":719},[709,2958,845],{"class":836},[709,2960,2961,2964,2966,2968,2970,2972,2974,2976,2979,2981,2984,2986,2988,2990,2992,2995,2997,3000,3003],{"class":711,"line":1122},[709,2962,2963],{"class":723},"  errorsByPath",[709,2965,639],{"class":719},[709,2967,1530],{"class":756},[709,2969,812],{"class":836},[709,2971,2091],{"class":723},[709,2973,970],{"class":719},[709,2975,1495],{"class":836},[709,2977,2978],{"class":723},"errorsByPath",[709,2980,639],{"class":719},[709,2982,2983],{"class":756},"get",[709,2985,812],{"class":836},[709,2987,2091],{"class":723},[709,2989,1929],{"class":836},[709,2991,1919],{"class":719},[709,2993,2994],{"class":2056}," 0",[709,2996,1929],{"class":836},[709,2998,2999],{"class":719},"+",[709,3001,3002],{"class":2056}," 1",[709,3004,845],{"class":836},[709,3006,3007],{"class":711,"line":1132},[709,3008,747],{"emptyLinePlaceholder":746},[709,3010,3011,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041,3043,3045],{"class":711,"line":1141},[709,3012,1867],{"class":715},[709,3014,1495],{"class":836},[709,3016,2024],{"class":719},[709,3018,1759],{"class":723},[709,3020,639],{"class":719},[709,3022,2031],{"class":723},[709,3024,2034],{"class":719},[709,3026,733],{"class":719},[709,3028,2039],{"class":736},[709,3030,1015],{"class":719},[709,3032,2044],{"class":719},[709,3034,1759],{"class":723},[709,3036,639],{"class":719},[709,3038,2031],{"class":723},[709,3040,2053],{"class":719},[709,3042,2057],{"class":2056},[709,3044,1929],{"class":836},[709,3046,2062],{"class":719},[709,3048,3049,3052,3055,3057,3060,3062,3065,3068,3071,3073,3076,3078,3080,3082,3084,3086,3088,3090,3092],{"class":711,"line":1147},[709,3050,3051],{"class":719},"    void",[709,3053,3054],{"class":723}," pager",[709,3056,639],{"class":719},[709,3058,3059],{"class":756},"notify",[709,3061,812],{"class":836},[709,3063,3064],{"class":719},"`",[709,3066,3067],{"class":736},"5xx on ",[709,3069,3070],{"class":719},"${",[709,3072,2091],{"class":723},[709,3074,3075],{"class":719},"}`",[709,3077,970],{"class":719},[709,3079,720],{"class":719},[709,3081,2108],{"class":836},[709,3083,655],{"class":719},[709,3085,1759],{"class":723},[709,3087,639],{"class":719},[709,3089,2121],{"class":723},[709,3091,727],{"class":719},[709,3093,845],{"class":836},[709,3095,3096],{"class":711,"line":1156},[709,3097,1159],{"class":719},[709,3099,3100,3102],{"class":711,"line":1162},[709,3101,842],{"class":719},[709,3103,845],{"class":723},[709,3105,3106],{"class":711,"line":2729},[709,3107,747],{"emptyLinePlaceholder":746},[709,3109,3111,3113,3116,3119,3122,3124,3126,3128,3130,3132,3134],{"class":711,"line":3110},17,[709,3112,803],{"class":715},[709,3114,3115],{"class":815}," function",[709,3117,3118],{"class":756}," errorCounts",[709,3120,3121],{"class":719},"():",[709,3123,1764],{"class":1751},[709,3125,1767],{"class":719},[709,3127,1770],{"class":1751},[709,3129,970],{"class":719},[709,3131,2813],{"class":1751},[709,3133,1778],{"class":719},[709,3135,825],{"class":719},[709,3137,3139,3141,3144,3146,3149,3151,3153],{"class":711,"line":3138},18,[709,3140,1104],{"class":715},[709,3142,3143],{"class":723}," Object",[709,3145,639],{"class":719},[709,3147,3148],{"class":756},"fromEntries",[709,3150,812],{"class":836},[709,3152,2978],{"class":723},[709,3154,845],{"class":836},[709,3156,3158],{"class":711,"line":3157},19,[709,3159,2448],{"class":719},[619,3161,3162,3163,3165],{},"A ",[622,3164,650],{"href":523}," 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.",[641,3167,305],{"id":3168},"cloudflare-workers",[619,3170,3171,3172,3176,3177,3179],{},"Workers forwards every diagnostics channel message to a ",[622,3173,679],{"href":3174,"rel":3175},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers\u002Fobservability\u002Flogs\u002Ftail-workers\u002F",[626],". Enable the channel in your Worker and the wide events leave the isolate with no drain, no ",[628,3178,683],{},", and their own CPU budget, and the Tail Worker does the shipping, after the response has already gone out:",[700,3181,3184],{"className":702,"code":3182,"filename":3183,"language":704,"meta":705,"style":705},"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",[628,3185,3186,3194,3211,3232,3257,3284,3288,3309,3324,3351,3382,3389,3394,3399,3404],{"__ignoreMap":705},[709,3187,3188,3190,3192],{"class":711,"line":712},[709,3189,803],{"class":715},[709,3191,806],{"class":715},[709,3193,825],{"class":719},[709,3195,3196,3199,3202,3204,3207,3209],{"class":711,"line":743},[709,3197,3198],{"class":815},"  async",[709,3200,3201],{"class":836}," tail",[709,3203,812],{"class":719},[709,3205,3206],{"class":1498},"events",[709,3208,1516],{"class":719},[709,3210,825],{"class":719},[709,3212,3213,3216,3218,3220,3222,3225,3228,3230],{"class":711,"line":750},[709,3214,3215],{"class":715},"    for",[709,3217,1495],{"class":836},[709,3219,1346],{"class":815},[709,3221,1759],{"class":723},[709,3223,3224],{"class":719}," of",[709,3226,3227],{"class":723}," events",[709,3229,1929],{"class":836},[709,3231,2062],{"class":719},[709,3233,3234,3237,3239,3241,3244,3246,3248,3250,3253,3255],{"class":711,"line":828},[709,3235,3236],{"class":715},"      for",[709,3238,1495],{"class":836},[709,3240,1346],{"class":815},[709,3242,3243],{"class":723}," messageData",[709,3245,3224],{"class":719},[709,3247,1759],{"class":723},[709,3249,639],{"class":719},[709,3251,3252],{"class":723},"diagnosticsChannelEvents",[709,3254,1929],{"class":836},[709,3256,2062],{"class":719},[709,3258,3259,3262,3264,3267,3269,3271,3273,3275,3277,3279,3281],{"class":711,"line":839},[709,3260,3261],{"class":715},"        if",[709,3263,1495],{"class":836},[709,3265,3266],{"class":723},"messageData",[709,3268,639],{"class":719},[709,3270,1814],{"class":723},[709,3272,2915],{"class":719},[709,3274,733],{"class":719},[709,3276,634],{"class":736},[709,3278,1015],{"class":719},[709,3280,1929],{"class":836},[709,3282,3283],{"class":715},"continue\n",[709,3285,3286],{"class":711,"line":921},[709,3287,747],{"emptyLinePlaceholder":746},[709,3289,3290,3293,3296,3298,3300,3303,3305,3307],{"class":711,"line":1096},[709,3291,3292],{"class":715},"        await",[709,3294,3295],{"class":756}," fetch",[709,3297,812],{"class":836},[709,3299,1015],{"class":719},[709,3301,3302],{"class":736},"https:\u002F\u002Flogs.example.com\u002Fingest",[709,3304,1015],{"class":719},[709,3306,970],{"class":719},[709,3308,825],{"class":719},[709,3310,3311,3314,3316,3318,3320,3322],{"class":711,"line":1101},[709,3312,3313],{"class":836},"          method",[709,3315,655],{"class":719},[709,3317,733],{"class":719},[709,3319,2270],{"class":736},[709,3321,1015],{"class":719},[709,3323,1153],{"class":719},[709,3325,3326,3329,3331,3333,3335,3338,3340,3342,3344,3347,3349],{"class":711,"line":1109},[709,3327,3328],{"class":836},"          headers",[709,3330,655],{"class":719},[709,3332,720],{"class":719},[709,3334,733],{"class":719},[709,3336,3337],{"class":836},"Content-Type",[709,3339,1015],{"class":719},[709,3341,655],{"class":719},[709,3343,733],{"class":719},[709,3345,3346],{"class":736},"application\u002Fjson",[709,3348,1015],{"class":719},[709,3350,2396],{"class":719},[709,3352,3353,3356,3358,3361,3363,3366,3368,3370,3372,3374,3376,3378,3380],{"class":711,"line":1122},[709,3354,3355],{"class":836},"          body",[709,3357,655],{"class":719},[709,3359,3360],{"class":723}," JSON",[709,3362,639],{"class":719},[709,3364,3365],{"class":756},"stringify",[709,3367,812],{"class":836},[709,3369,3266],{"class":723},[709,3371,639],{"class":719},[709,3373,1835],{"class":723},[709,3375,639],{"class":719},[709,3377,2004],{"class":723},[709,3379,1516],{"class":836},[709,3381,1153],{"class":719},[709,3383,3384,3387],{"class":711,"line":1132},[709,3385,3386],{"class":719},"        }",[709,3388,845],{"class":836},[709,3390,3391],{"class":711,"line":1141},[709,3392,3393],{"class":719},"      }\n",[709,3395,3396],{"class":711,"line":1147},[709,3397,3398],{"class":719},"    }\n",[709,3400,3401],{"class":711,"line":1156},[709,3402,3403],{"class":719},"  },\n",[709,3405,3406],{"class":711,"line":1162},[709,3407,2448],{"class":719},[619,3409,3410,3411,2455,3413,2467,3415,3417,3418,3420,3421,3424,3425,3428],{},"Each entry carries ",[628,3412,2180],{},[628,3414,1814],{},[628,3416,1835],{},", with ",[628,3419,1835],{}," being what evlog published, so the wide event is at ",[628,3422,3423],{},"messageData.message.event",". Requires the ",[628,3426,3427],{},"nodejs_compat"," flag, and messages go through the structured clone algorithm, so only cloneable values survive.",[641,3430,3432],{"id":3431},"when-a-plugin-is-the-better-tool","When a plugin is the better tool",[619,3434,3435,3436,3439],{},"The channel is not a replacement for ",[622,3437,3438],{"href":523},"plugins",". It is narrower on purpose:",[3441,3442,3443,3456],"table",{},[3444,3445,3446],"thead",{},[3447,3448,3449,3453],"tr",{},[3450,3451,3452],"th",{},"You want to…",[3450,3454,3455],{},"Use",[3457,3458,3459,3470,3481,3493,3501],"tbody",{},[3447,3460,3461,3465],{},[3462,3463,3464],"td",{},"Ship events to a backend, with batching and retry",[3462,3466,3467],{},[622,3468,3469],{"href":540},"Custom drain",[3447,3471,3472,3475],{},[3462,3473,3474],{},"Add fields to the event before it drains",[3462,3476,3477,3480],{},[622,3478,3479],{"href":527},"Enricher"," or a plugin",[3447,3482,3483,3486],{},[3462,3484,3485],{},"Fan out to several in-process consumers",[3462,3487,3488,3489,3492],{},"Plugins — ",[628,3490,3491],{},"initLogger({ plugins: [a, b, c] })"," already does this",[3447,3494,3495,3498],{},[3462,3496,3497],{},"Subscribe from a package that must not depend on evlog",[3462,3499,3500],{},"This channel",[3447,3502,3503,3506],{},[3462,3504,3505],{},"Get events out of a Cloudflare Worker without a drain",[3462,3507,3500],{},[619,3509,3510,3513],{},[628,3511,3512],{},"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.",[3515,3516,3517],"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":705,"searchDepth":743,"depth":743,"links":3519},[3520,3521,3522,3523,3524,3528,3529],{"id":643,"depth":743,"text":644},{"id":694,"depth":743,"text":695},{"id":1705,"depth":743,"text":1706},{"id":2158,"depth":743,"text":2159},{"id":2493,"depth":743,"text":2494,"children":3525},[3526,3527],{"id":2498,"depth":750,"text":2499},{"id":2758,"depth":750,"text":2759},{"id":3168,"depth":743,"text":305},{"id":3431,"depth":743,"text":3432},"Publish every wide event on a node:diagnostics_channel, so a consumer subscribes without importing evlog and Cloudflare can Tail Worker it.","md",[3533,3536],{"label":522,"icon":497,"to":523,"color":3534,"variant":3535},"neutral","subtle",{"label":499,"icon":3537,"to":500,"color":3534,"variant":3535},"i-lucide-radio",{},{"title":509,"icon":502},{"title":614,"description":3530},"1gPOASUiifn1EEZaY4yKZHM5Wr7ThOrGNXV58ERROIQ",[3543,3545],{"title":504,"path":505,"stem":506,"description":3544,"icon":507,"children":-1},"Build evlog support for a framework or runtime that has no integration, with defineFrameworkIntegration or the lower-level helpers.",{"title":513,"path":514,"stem":515,"description":3546,"icon":516,"children":-1},"Replay and tail the local NDJSON drain with readFsLogs and tailFsLogs — works in-process or from any external Node tool, survives restarts.",1791636538214]