Registro para JavaScript (Node.js): melhores soluções
Registro é a base do monitoramento e depuração de qualquer aplicação web. No mundo Node.js, existem várias bibliotecas maduras e populares que permitem configurar de forma flexível a coleta, formatação e armazenamento de logs. Neste artigo, veremos quatro melhores soluções: Winston, Pino, Bunyan e Morgan. Você conhecerá suas características, pontos fortes e obterá exemplos práticos de uso.
Por que o registro é necessário no Node.js?
Ao contrário do JavaScript do navegador, uma aplicação servidora funciona sem acesso direto ao console do desenvolvedor. Os logs permitem:
- Rastrear erros e exceções em tempo real.
- Analisar desempenho (tempo de resposta, requisições).
- Registrar eventos de auditoria (login de usuário, alteração de dados).
- Integrar-se com sistemas externos de monitoramento (ELK, Datadog, Splunk).
1. Winston — padrão universal
Winston é a biblioteca de registro mais popular para Node.js. Sua principal vantagem são os transportes (para onde escrever logs) e os formatos (como representá-los).
Instalação:
npm install winstonExemplo de configuração básica:
const winston = require('winston');
const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.Console(), new winston.transports.File({ filename: 'combined.log' }) ]});
logger.info('Servidor iniciado na porta 3000');logger.error('Erro de conexão com o BD', { db: 'main' });Recursos principais:
- Suporte a múltiplos transportes (console, arquivo, HTTP, MongoDB, Elasticsearch).
- Formatos personalizados (JSON, texto simples, com carimbos de data/hora).
- Filtragem por nível (error, warn, info, verbose, debug, silly).
- Criação de loggers filhos para diferentes módulos.
Quando escolher: para projetos complexos que exigem roteamento flexível de logs e integração com serviços externos.
2. Pino — logger ultrarrápido
Pino foi criado para máxima performance. Ele é 5 a 10 vezes mais rápido que o Winston graças ao uso de JSON estruturado e à minimização de sobrecarga.
Instalação:
npm install pinoExemplo de uso:
const pino = require('pino');
const logger = pino({ level: 'info', transport: { target: 'pino-pretty', // para saída bonita no console options: { colorize: true } }});
logger.info({ user: 42 }, 'Usuário entrou no sistema');logger.error(new Error('Falha ao carregar arquivo'));Características:
- Consumo mínimo de CPU e memória.
- Suporte embutido ao
pino-prettypara desenvolvimento. - Trabalho com streams para integração com outras ferramentas.
- Serialização automática de objetos sem perda de performance.
Quando escolher: para aplicações de alta carga (APIs, microsserviços), onde cada milissegundo conta.
3. Bunyan — logs estruturados dos criadores da Joyent
Bunyan da empresa Joyent (criadores do Node.js) foca em uma estrutura rigorosa de logs. Cada mensagem é um objeto JSON com campos obrigatórios (hostname, pid, time).
Instalação:
npm install bunyanExemplo:
const bunyan = require('bunyan');
const logger = bunyan.createLogger({ name: 'myapp', streams: [ { level: 'info', stream: process.stdout }, { level: 'error', path: 'error. Também na biblioteca
Configuração de aplicativos Swift: ferramentas e bibliotecas para iOS/macOS
Trabalhando com S3 e armazenamentos em nuvem em C++: biblioteca AWS SDK para C++
Flow para Kotlin: guia completo com exemplos
Trabalhando com S3 e armazenamento em nuvem em Swift (iOS/macOS): AWSS3 e Amplify