Introdução: Por que o logging é necessário em TypeScript?
Logging é o processo de registrar eventos que ocorrem em uma aplicação durante sua execução. Para um desenvolvedor TypeScript, isso não é apenas um complemento, mas uma ferramenta essencial para depuração, monitoramento e análise do comportamento do programa. Sem um logging configurado corretamente, você corre o risco de perder horas procurando erros que poderiam ser encontrados em minutos.
Neste artigo, vamos abordar as melhores práticas de logging para desenvolvedores iniciantes em TypeScript. Você aprenderá como ir além do simples console.log, quais bibliotecas usar e como estruturar os logs para que eles tragam benefícios reais.
1. Fundamentos do logging: do console.log aos dados estruturados
Muitos iniciantes começam com console.log('Algo deu errado'). Isso funciona, mas rapidamente se transforma em caos. No desenvolvimento moderno com TypeScript, é comum usar logging estruturado.
Problemas do console.log simples
- Falta de níveis: Você não consegue filtrar erros de mensagens de depuração.
- Sem contexto: Não está claro de qual módulo ou função veio a mensagem.
- Baixa legibilidade: Em ambiente de produção, os logs são frequentemente analisados por máquinas, não por pessoas.
Primeiro passo para a organização: níveis de logging
A melhor prática é usar níveis padrão:
debug— para depuração durante o desenvolvimento.info— para eventos normais (requisição processada, usuário autenticado).warn— para problemas potenciais (falta de memória, API obsoleta).error— para falhas críticas.
Exemplo de uma abordagem simples, mas já útil:
// bad.tsconsole.log('Usuário logado'); // ❌
// good.tsconst logger = { info: (message: string, meta?: Record<string, unknown>) => { console.log(JSON.stringify({ level: 'info', message, timestamp: new Date().toISOString(), ...meta })); }, error: (message: string, error?: Error) => { console.error(JSON.stringify({ level: 'error', message, stack: error?.stack, timestamp: new Date().toISOString() })); }};
logger.info('Usuário logado', { userId: 123 }); // ✅Aqui adicionamos um carimbo de data/hora e o nível. Isso já pode ser analisado. Mas escrever esse código manualmente para cada projeto não é eficiente — use bibliotecas prontas.
2. Escolha de uma biblioteca de logging em TypeScript
Para TypeScript, existem várias bibliotecas excelentes. Vamos considerar as duas mais populares: Winston e tslog. Para iniciantes, recomendamos tslog devido à sua simplicidade e suporte completo ao TypeScript.
tslog — a escolha ideal para iniciantes
Esta biblioteca é escrita em TypeScript e fornece logs coloridos e bonitos no console. Ela não requer configuração complexa.
// Instalação: npm install tslogimport { Logger } from 'tslog';
const logger = new Logger({ name: 'MyApp' });
logger.info('Aplicação iniciada');logger.warn('Memória está acabando');logger.error('Erro de conexão com o BD', { retryCount: 3 });Vantagens do tslog:
- Suporte automático ao TypeScript (tipos incluídos).
- Saída bonita no console com cores.
- Níveis de logging integrados.
- Curva de aprendizado mínima.
Winston — poderoso, mas mais complexo
Winston é o padrão da indústria. Ele permite enviar logs para arquivos, bancos de dados, Elasticsearch. No entanto, para projetos simples, sua configuração pode ser excessiva.
// Instalação: npm install winstonimport winston from 'winston';
const logger = winston.createLogger({ level: 'info', format: winston.form