Registro para TypeScript: melhores soluções
O registro é um componente crítico de qualquer aplicação em produção. Para o ecossistema TypeScript, existem várias bibliotecas, cada uma oferecendo um conjunto único de recursos. Neste artigo, veremos as cinco melhores soluções: Winston, Pino, Bunyan, Log4js e TSLog. Você conhecerá seus pontos fortes, recursos de configuração e obterá exemplos de código prontos.
1. Winston — o padrão universal
Winston é a biblioteca de registro mais popular para Node.js com suporte total a TypeScript. Ela fornece um poderoso sistema de transports (para onde enviar os logs) e formatação.
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(), new winston.transports.File({ filename: 'error.log', level: 'error' }) ]});
logger.info('Aplicação iniciada', { service: 'user-service' });logger.error('Erro de conexão com o banco de dados', { error: err.message });Vantagens:
- Sistema flexível de transports (arquivos, console, HTTP, MongoDB, Elasticsearch)
- Suporte integrado à rotação de logs via winston-daily-rotate-file
- Excelente integração com TypeScript — tipagem completa
- Compatibilidade com profilers e sistemas APM
2. Pino — logger ultrarrápido
Pino é focado em desempenho — é 5 a 10 vezes mais rápido que o Winston. Escolha ideal para sistemas de alta carga e microsserviços.
import pino from 'pino';
const logger = pino({ level: process.env.LOG_LEVEL || 'info', transport: { target: 'pino-pretty', options: { colorize: true } }});
logger.info({ user: { id: 123 } }, 'Usuário autenticado');Principais características:
- Consumo mínimo de CPU e memória
- Suporte nativo a streams do Node.js
- Serialização eficiente de objetos
- Suporte a child-loggers para registro contextual
3. Bunyan — registro estruturado da Joyent
Bunyan foi criado para trabalhar com arquitetura de microsserviços. Todos os logs são gerados em formato JSON, facilitando a análise e o parsing.
import bunyan from 'bunyan';
const logger = bunyan.createLogger({ name: 'myapp', level: 'info', serializers: { req: bunyan.stdSerializers.req, err: bunyan.stdSerializers.err }});
logger.info({ req: request }, 'Requisição recebida');Características:
- Serializadores integrados para requisições HTTP e erros
- Suporte a ringbuffer para armazenar os últimos N registros
- Utilitário bunyan CLI para saída formatada no console
- Integração simples com a stack ELK
4. Log4js — abordagem familiar do Java
Log4js é uma adaptação do popular framework Java Log4j. Oferece configuração familiar através de níveis e appenders.
import log4js from 'log4js';
log4js.configure({ appenders: { out: { type: 'stdout' }, app: { type: 'file', filename: 'application.log' } }, categories: { default: { appenders: ['out', 'app'], level: 'debug' } }});
const logger = log4js.getLogger();logger.debug('Depuração de conexão');logger.error('Erro crítico');Pontos fortes:
- Sistema flexível de categorias e filtros
- Suporte a múltiplos appenders (arquivos, bancos de dados, TCP)
- Possibilidade de sobrescrever níveis para diferentes módulos
- Suporte integrado a clusterização
5. TSLog — solução leve para TypeScript
TSLog é uma biblioteca minimalista, escrita especificamente para TypeScript. Ideal para projetos
Também na biblioteca
Configuração de aplicações Java: bibliotecas e ferramentas
Joi para JavaScript (Node.js): guia completo com exemplos
PDFKit para JavaScript (Node.js): guia completo com exemplos
Autorização e Autenticação em Swift (iOS/macOS): Guia Completo
Internacionalização (i18n) em Rust: melhores bibliotecas e práticas