util e diagnósticos
node:util faz a ponte entre callbacks e Promises, formata objetos para logs e fornece helpers de depuração - combine com node:diagnostics_channel e perf_hooks para insights mais profundos em produção.
Busque em todas as páginas da documentação
node:util faz a ponte entre callbacks e Promises, formata objetos para logs e fornece helpers de depuração - combine com node:diagnostics_channel e perf_hooks para insights mais profundos em produção.
import { promisify, inspect, debuglog, styleText, parseEnv } from 'node:util';
import { gzip } from 'node:zlib';
const gzipAsync = promisify(gzip);
const log = debuglog('billing');
log('processando', { id: '1' });Quando usar:
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('evento de pedido', inspect(message, { depth: 2, maxArrayLength: 10 }));
});
export async function compressJson(obj: unknown): Promise<Buffer> {
const json = JSON.stringify(obj);
debug('bytes de entrada para compressão', json.length);
return gzipAsync(Buffer.from(json, 'utf8'));
}
console.log(styleText('cyan', 'info'), 'inicialização do servidor');import { parseEnv } from 'node:util';
const parsed = parseEnv('FOO=bar\nBAZ=qux');O que isto demonstra:
inspect trunca a profundidade/array para logs legíveis em vez de erros de JSON circulardebuglog só imprime quando NODE_DEBUG=api ou NODE_DEBUG=*diagnostics_channel publica/assina eventos transversais sem acoplamento rígidoparseEnv analisa strings no estilo dotenv em testes sem arquivos(err, result) no final - retorna uma função que retorna Promise.util.inspect.custom em classes para representações redigidas.| Necessidade | Ferramenta |
|---|---|
| Callback → Promise | promisify |
| Log seguro de objetos | inspect |
| Depuração de flags de recursos | debuglog |
| Medição de performance | perf_hooks |
| OpenTelemetry | OTel SDK |
import { types } from 'node:util';
if (types.isPromise(maybe)) {
await maybe;
}inspect + redação.promisify com callbacks não padrão - trava. Correção: wrapper manual de Promise.NODE_DEBUG=* em produção - E/S de stderr verbosa. Correção: apenas em dev/staging.inspect para serialização - não é JSON - use JSON.stringify para formato de rede.diagnostics_channel sem cancelar a assinatura - vazamentos em testes. Correção: cancelar a assinatura na limpeza.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| fs/promises | Callbacks de arquivo | Já é nativo de Promise |
| Logs estruturados Pino | Logging em produção | Depuração rápida |
| OpenTelemetry | Traces distribuídos | Depuração local com printf |
node:assert | Invariantes | Depuração verbosa |
Módulos de Promise embutidos são preferíveis - use promisify apenas para bibliotecas de callback de terceiros.
Formatação estilo printf como o primeiro argumento de console.log - padrão legado.
2 - aumente localmente, mantenha baixa nos logs de produção.
Variável de ambiente NODE_DEBUG=namespace no início do processo.
Canais projetados para sondas de diagnóstico - menor acoplamento do que barramentos EventEmitter de domínio.
parseEnv para testes em memória; dotenv para carregar arquivos no bootstrap da aplicação com validação Zod.
Suporte a cores TTY - verifique process.stdout.isTTY para saída simples em CI.
Bibliotecas podem exportar um símbolo custom para promisify para um comportamento correto.
Detectando Bloqueio do Event-Loop para métricas de ELU.
Herança de classe legada - use extends de classe ES em código moderno.
Use Object.assign - evite helpers util depreciados.
Defina NODE_DEBUG=test no ambiente de teste e capture stderr se necessário.
promisifyVersões da Stack: Esta página foi escrita para Node.js 24.18.0 (Active LTS), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026