O que é Winston e para que serve?
Winston é uma biblioteca poderosa e flexível para logging em aplicações TypeScript e JavaScript. Ela permite registrar logs em vários destinos (console, arquivos, bancos de dados) com diferentes níveis de importância. Ao contrário do simples console.log, o Winston oferece controle total sobre o formato dos logs, sua rotação e filtragem.
Para que usar Winston? Em projetos grandes, a saída padrão do console se torna inútil: os logs se misturam, se perdem e não podem ser analisados. O Winston resolve esses problemas: você pode configurar o registro de erros em um arquivo separado, mensagens informativas no console e dados de depuração em um banco de dados. Isso é fundamental para depuração, monitoramento e auditoria.
Instalação
Para instalar o Winston em um projeto TypeScript, execute o comando:
npm install winstonTambém é recomendado instalar os tipos:
npm install --save-dev @types/winstonSe você usa yarn:
yarn add winstonPrincipais funcionalidades
- Níveis de logging: error, warn, info, http, verbose, debug, silly. Cada nível tem uma prioridade, e você pode configurar quais níveis serão exibidos em diferentes transports.
- Transports: formas de saída dos logs. Integrados: Console, File, Http, Stream. É possível criar os seus próprios.
- Formatos: personalização da aparência dos logs (JSON, timestamp, saída colorida).
- Rotação de arquivos: através do módulo adicional
winston-daily-rotate-file, é possível criar automaticamente novos arquivos de log por dia ou tamanho. - Metadados: passagem de contexto adicional (por exemplo, ID da requisição, nome do usuário).
Exemplo de código em TypeScript
Vamos criar um logger simples com saída para console e arquivo:
import winston from 'winston';
const 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.error('Erro de conexão com o banco de dados', { database: 'main' });Neste exemplo: mensagens informativas são exibidas no console (coloridas) e no arquivo combined.log, enquanto os erros são adicionalmente registrados em error.log. O formato dos logs é JSON com timestamp.
Quando usar Winston?
- Em ambientes de produção para monitoramento de erros.
- Em arquitetura de microsserviços para coletar logs em um armazenamento centralizado.
- Quando for necessária auditoria das ações dos usuários.
- Em projetos que exigem análise de logs com ELK (Elasticsearch, Logstash, Kibana) ou outros sistemas.
Winston é o padrão da indústria para logging em TypeScript. É simples de configurar, mas escalável para requisitos complexos.
Também na biblioteca
Redis (ioredis) para JavaScript (Node.js): guia completo com exemplos
Eloquent ORM para PHP: guia completo com exemplos