util y diagnósticos
node:util conecta callbacks con Promises, formatea objetos para registros y proporciona ayudantes de depuración. Combínalo con node:diagnostics_channel y perf_hooks para una visión más profunda de la producción.
Busca en todas las páginas de la documentación
node:util conecta callbacks con Promises, formatea objetos para registros y proporciona ayudantes de depuración. Combínalo con node:diagnostics_channel y perf_hooks para una visión más profunda de la producción.
import { promisify, inspect, debuglog, styleText, parseEnv } from 'node:util';
import { gzip } from 'node:zlib';
const gzipAsync = promisify(gzip);
const log = debuglog('billing');
log('processing', { id: '1' });Cuándo usarlo:
JSON.stringifyNODE_DEBUG=billingstyleTextimport { promisify, inspect, debuglog, styleText } from 'node:util';
import { gzip } from 'node:zlib';
import { diagnostics_channel } from 'node:diagnostics_channel';
const gzipAsync = promisify(gzip);
const debug = debuglog('api');
const orderChannel = diagnostics_channel.channel('app:order');
orderChannel.subscribe((message) => {
debug('order event', inspect(message, { depth: 2, maxArrayLength: 10 }));
});
export async function compressJson(obj: unknown): Promise<Buffer> {
const json = JSON.stringify(obj);
debug('compress input bytes', json.length);
return gzipAsync(Buffer.from(json, 'utf8'));
}
console.log(styleText('cyan', 'info'), 'server boot');import { parseEnv } from 'node:util';
const parsed = parseEnv('FOO=bar\nBAZ=qux');Lo que esto demuestra:
inspect trunca la profundidad/array para registros legibles frente a errores JSON circularesdebuglog solo imprime cuando NODE_DEBUG=api o NODE_DEBUG=*diagnostics_channel publica/suscribe eventos transversales sin un acoplamiento estrictoparseEnv analiza cadenas de estilo dotenv en pruebas sin archivos(err, result) callback al final - devuelve una función que retorna una Promise.util.inspect.custom en clases para representaciones redactadas.| Necesidad | Herramienta |
|---|---|
| Callback → Promise | promisify |
| Registro seguro de objetos | inspect |
| Depuración de flags de características | debuglog |
| Medición del rendimiento | perf_hooks |
| OpenTelemetry | OTel SDK |
import { types } from 'node:util';
if (types.isPromise(maybe)) {
await maybe;
}inspect + redacción.JSON.stringify para el formato de cable.| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
| fs/promises | Callbacks de archivo | Ya es promise-native |
| Registros estructurados de Pino | Registro de producción | Depuración rápida |
| OpenTelemetry | Trazas distribuidas | Depuración local de printf |
node:assert | Invariantes | Depuración verbosa |
Se prefieren los módulos de promesa incorporados - promisify solo para bibliotecas de callback de terceros.
Formato estilo printf como el primer argumento de console.log - patrón heredado.
2 - aumenta localmente, mantenla baja en los registros de producción.
Variable de entorno NODE_DEBUG=namespace al inicio del proceso.
Los canales están diseñados para sondas de diagnóstico - menor acoplamiento que los buses EventEmitter de dominio.
parseEnv para pruebas en memoria; carga de archivos dotenv para el arranque de la aplicación con validación Zod.
Soporte de color TTY - verifica process.stdout.isTTY para salida plana en CI.
Las bibliotecas pueden exportar un símbolo promisify personalizado para un comportamiento correcto.
Detección de bloqueo del bucle de eventos para métricas ELU.
Herencia de clases heredada - usa extends de clases ES en código moderno.
Usa Object.assign - evita los ayudantes util deprecados.
Establece NODE_DEBUG=test en el entorno de prueba y captura stderr si es necesario.
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS activa), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.
Revisado por Chris St. John·Última actualización: 16 jul 2026