TypeScript:
Registro de Logs
Como Fazer:
Em TypeScript, você pode facilmente implementar um logging básico usando os métodos do console ou integrar um logging mais avançado com bibliotecas como winston
ou pino
. Aqui está um exemplo básico usando console.log
e um mais avançado com winston
.
// Logging básico no console
console.log('Info: Iniciando a aplicação...');
console.error('Erro: Não foi possível recuperar os dados.');
// Saída de Exemplo
// Info: Iniciando a aplicação...
// Erro: Não foi possível recuperar os dados.
Para um logging mais robusto, vamos configurar o winston
:
import { createLogger, format, transports } from 'winston';
const logger = createLogger({
level: 'info',
format: format.combine(
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`)
),
transports: [
new transports.Console(),
new transports.File({ filename: 'combined.log' })
]
});
logger.info('Servidor iniciado!');
logger.warn('Aviso de pouco espaço em disco.');
logger.error('Falha ao conectar ao banco de dados.');
// Saída de Exemplo no combined.log
// 2023-01-20 14:42:07 info: Servidor iniciado!
// 2023-01-20 14:42:09 warn: Aviso de pouco espaço em disco.
// 2023-01-20 14:42:12 error: Falha ao conectar ao banco de dados.
Aprofundamento:
O conceito de logging no contexto da computação remonta aos primeiros dias da programação, onde o termo em si é derivado do “logbook”, um sistema de registro usado na navegação. Historicamente, eventos de programas eram frequentemente registrados em impressões físicas ou saídas de terminais, especialmente durante a era dos mainframes.
Avançando para hoje, temos à disposição uma infinidade de ferramentas e bibliotecas que atendem a várias necessidades de logging, desde arquivos de texto simples até sistemas complexos de gerenciamento de logs. Alternativas ao winston
incluem o pino
, que se orgulha de alta performance, e o Bunyan
, baseado em JSON. Ao trabalhar com Node.js, bibliotecas de logging frequentemente fornecem mecanismos de stream para direcionar logs para diferentes destinos, suporte para rotação de logs e formatadores personalizáveis.
Em termos de implementação, mensagens de log geralmente contêm um carimbo de data/hora, um nível de severidade (como info, warn, error) e a mensagem atual. Boas práticas de logging recomendam categorizar os níveis de log adequadamente, evitar dados sensíveis nos logs e considerar as implicações de desempenho em aplicações de alto throughput.