~2 min read • Updated Dec 27, 2025
1. Introduction
The diagnostics_channel module enables the creation of named channels for publishing diagnostic messages. These channels can be subscribed to by handlers that consume diagnostic data.
2. Public API
diagnostics_channel.channel(name): Create or retrieve a channel.diagnostics_channel.hasSubscribers(name): Check if a channel has active subscribers.diagnostics_channel.subscribe(name, handler): Register a handler to receive messages.diagnostics_channel.unsubscribe(name, handler): Remove a previously registered handler.
3. Channel Class
channel.hasSubscribers: Check for active subscribers.channel.publish(message): Publish a message to subscribers.channel.subscribe(handler): Register a handler for the channel.channel.unsubscribe(handler): Remove a handler.channel.bindStore(store, transform): Bind context data toAsyncLocalStorage.channel.runStores(context, fn): Run a function within the bound storage context.
4. TracingChannel Class
TracingChannel is a collection of channels representing traceable actions. It simplifies event publishing for tracing application flow.
traceSync(fn, context): Trace synchronous function execution.tracePromise(fn, context): Trace promise-based function execution.traceCallback(fn, position, context): Trace callback-based function execution.- Channels include: start, end, asyncStart, asyncEnd, and error.
5. Built-in Channels
- Console: Events for
console.log,console.error, etc. - HTTP: Events for client and server requests/responses.
- HTTP/2: Events for client and server streams.
- Modules: Events for
require()andimport(). - NET: Events for TCP and pipe connections.
6. Example
const diagnostics_channel = require('node:diagnostics_channel');
const channel = diagnostics_channel.channel('my-channel');
channel.subscribe((message, name) => {
console.log('Received:', message);
});
if (channel.hasSubscribers) {
channel.publish({ some: 'data' });
}
Conclusion
The diagnostics_channel module provides a structured way to manage diagnostic data and trace application execution in Node.js. By leveraging Channel and TracingChannel, developers can monitor synchronous and asynchronous operations, capture errors, and integrate with AsyncLocalStorage for context propagation.
Written & researched by Dr. Shahin Siami