O que é Winston e para que serve?
Winston é uma biblioteca popular para logging em TypeScript e JavaScript. Ela fornece um sistema flexível de registro de logs com suporte a múltiplos transports (saída para console, arquivo, banco de dados, HTTP), níveis de logging e formatação de mensagens. Em projetos grandes, o logging é criticamente importante para depuração, monitoramento e auditoria de ações do usuário ou do sistema. Winston permite estruturar logs, filtrá-los por importância e salvá-los em um formato adequado para análise.
Como instalar Winston no TypeScript
Para instalar, execute o comando no terminal:
npm install winstonTambém é recomendado instalar os tipos para TypeScript:
npm install --save-dev @types/winstonPrincipais funcionalidades do Winston
- Níveis de logging: error, warn, info, verbose, debug, silly (configuráveis).
- Transports: Console, File, HTTP, MongoDB, Syslog e outros.
- Formatação: JSON, texto simples, timestamps, cores.
- Assincronicidade: não bloqueia a thread principal.
- Perfis personalizados: criação de níveis e transports próprios.
Exemplo de código em TypeScript
import winston from 'winston';
const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.Console({ format: winston.format.simple(), }), new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }), ],});
logger.info('Aplicação iniciada');logger.error('Erro de conexão com o banco de dados');Este código cria um logger que escreve todas as mensagens de nível info e superiores no console, erros no error.log e todos os logs no combined.log.
Quando usar Winston
Winston é adequado para qualquer aplicação servidora em Node.js (Express, NestJS, Koa), microsserviços, utilitários CLI e scripts complexos. É especialmente útil em ambiente de produção, onde é necessário armazenamento centralizado de logs, rotação de arquivos e integração com sistemas de monitoramento (ELK, Splunk). Para projetos simples, pode-se usar o console.log nativo, mas Winston oferece controle e escalabilidade.