O que é winston e para que serve?
Winston é uma biblioteca de logging poderosa e flexível para aplicações em TypeScript e JavaScript. Ela permite registrar mensagens estruturadas de diferentes níveis (info, warn, error, debug) no console, arquivos, bancos de dados ou serviços externos. Winston resolve o problema da falta de um mecanismo de logging embutido no Node.js, fornecendo uma API conveniente para configurar formatos, transports (para onde escrever os logs) e níveis de importância. A biblioteca é amplamente utilizada em projetos de produção, microsserviços e aplicações web.
Instalação
Para instalar o winston em um projeto TypeScript, execute:
npm install winstonnpm install --save-dev @types/winstonOu via yarn:
yarn add winstonyarn add --dev @types/winstonPrincipais funcionalidades
- Níveis de logging: error, warn, info, http, verbose, debug, silly (é possível configurar os seus próprios).
- Transports: Console, File, HTTP, Stream, além de customizados (por exemplo, para Elasticsearch).
- Formatos: JSON, texto simples, timestamp, rótulos, cores no console.
- Múltiplos transports: escrever simultaneamente no console e em arquivo.
- Logging de exceções: captura automática de uncaughtException.
- Wrapper proxy para TypeScript: logger tipado com autocompletar.
Exemplo de código em TypeScript
import winston from 'winston';
const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), 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('Nível baixo de memória');logger.error('Erro de conexão com o BD', { error: err });Quando usar winston
Winston é ideal para:
- Aplicações backend em Node.js/TypeScript (Express, NestJS, Fastify).
- Arquitetura de microsserviços — coleta centralizada de logs via HTTP transport.
- Monitoramento de produção — gravação de logs em arquivos com rotação (winston-daily-rotate-file).
- Depuração e desenvolvimento — saída colorida no console com diferentes níveis.
- Sistemas com requisitos de auditoria — logs estruturados em JSON para análise.
Não use winston em scripts simples onde console.log é suficiente — para projetos pequenos é excessivo. Evite também winston em aplicações client-side no navegador (nestes casos, é melhor usar console ou bibliotecas especializadas).
Conclusão
Winston é o padrão de facto para logging em projetos TypeScript. Ele oferece flexibilidade, desempenho e segurança de tipos com a configuração adequada. Comece com um logger simples e expanda-o à medida que a aplicação cresce.
```Também na biblioteca
Trabalhando com Excel em C# (.NET): Bibliotecas EPPlus e ClosedXML
Trabalho com imagens em Rust: redimensionar e cortar com a biblioteca image