O que é winston e para que serve?
Winston é a biblioteca de logging mais popular no ambiente Node.js. Ela fornece uma API simples e universal que permite registrar logs com diferentes níveis de importância, formatá-los e enviá-los para diferentes destinos (console, arquivos, bancos de dados, serviços externos). Ao contrário do simples console.log, o winston oferece controle total sobre o logging: você pode configurar a rotação de logs por tamanho ou data, filtrar mensagens por nível (info, warn, error, debug), adicionar metadados (hora, ID da requisição) e até usar vários transports simultaneamente. É uma ferramenta indispensável para monitoramento, depuração e auditoria em aplicações em produção.
Instalação
Instale o winston via npm ou yarn:
npm install winston# ouyarn add winstonFuncionalidades principais
- Níveis de logging: error, warn, info, http, verbose, debug, silly.
- Transports: Console, File, HTTP, Stream e personalizados.
- Formatos: JSON, texto simples, carimbo de data/hora, saída colorida.
- Combinação de múltiplos transports: por exemplo, erros em arquivo e info no console.
- Transports e formatos personalizados: é possível integrar com Logstash, Sentry, Papertrail e outros.
- Rotação de logs: através do módulo adicional winston-daily-rotate-file.
- Exceções e rejeições não tratadas: captura automática de erros não tratados.
Exemplo de código em JavaScript (Node.js)
const winston = require('winston');
// Criando o loggerconst logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), transports: [ new winston.transports.Console({ format: winston.format.combine( winston.format.colorize(), winston.format.simple() ) }), new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }) ]});
// Usologger.info('Servidor iniciado na porta 3000');logger.warn('Memória insuficiente', { memoryUsage: process.memoryUsage() });try { throw new Error('Algo quebrou');} catch (err) { logger.error('Erro ao processar requisição', { error: err.message, stack: err.stack });}Quando usar
Winston é ideal para qualquer projeto Node.js que exija logging estruturado: servidores web (Express, Koa), microsserviços, utilitários CLI, bots, processos ETL. Ele é especialmente útil em ambientes de produção, onde é necessário centralizar logs, analisar erros e encontrar problemas rapidamente. Se o seu projeto usa TypeScript, o winston tem suporte completo a tipos.
Alternativas: pino (mais rápido, mais leve), log4js (configuração via XML/JSON), bunyan (logs em JSON). Mas o winston continua sendo a solução mais flexível e difundida.
```Também na biblioteca
Bibliotecas GraphQL para Kotlin: uma visão geral completa para desenvolvedores backend
GraphQL em Swift: Guia Completo da Biblioteca Apollo iOS
Entity Framework Core para C# (.NET): guia completo com exemplos
Cron para Go: guia completo com exemplos práticos
Trabalho com ZIP/arquivos em Java: java.util.zip e Zip4j