Registro em Aplicações JavaScript: Melhores Práticas — Parte 3
Nesta parte final da série de artigos sobre registro em JavaScript, abordaremos técnicas e ferramentas avançadas que ajudarão você a construir um sistema de monitoramento confiável em aplicações Node.js. O material será útil tanto para aprendizado quanto para aplicação prática — desde JavaScript para iniciantes até desenvolvedores experientes. Discutiremos registro estruturado, rotação de logs, integração com serviços externos e segurança.
1. Registro Estruturado em Node.js
O console.log() comum não é adequado para ambientes de produção. Em vez disso, use bibliotecas que geram logs em JSON. Isso simplifica a análise e o parsing.
Exemplo com a biblioteca Winston
const winston = require('winston');
const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }) ]});
// Usologger.info('Usuário registrado', { userId: 123, email: 'user@example.com' });logger.error('Erro no banco de dados', { error: err.message, stack: err.stack });Essa abordagem permite filtrar logs facilmente por nível, tempo e contexto. Isso é especialmente importante na programação de microsserviços.
2. Rotação de Logs e Gerenciamento de Tamanho
Os logs podem encher rapidamente o disco. Use rotação — arquivamento automático de arquivos antigos. Em Node.js, isso é facilmente implementado com o módulo winston-daily-rotate-file.
Exemplo de configuração de rotação
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({ filename: 'logs/application-%DATE%.log', datePattern: 'YYYY-MM-DD', maxSize: '20m', maxFiles: '14d'});
const logger = winston.createLogger({ transports: [transport]});Isso garante que os logs não ocupem mais de 20 MB por dia e sejam armazenados por 14 dias.
3. Integração com Serviços Externos de Monitoramento
Para coleta centralizada de logs, use serviços como Logstash, Datadog ou Sentry. Em JavaScript, isso é feito através dos transports do Winston.
Exemplo de envio de logs para o Logstash
const { LogstashTransport } = require('winston-logstash-transport');
const logger = winston.createLogger({ transports: [ new LogstashTransport({ host: 'logstash.example.com', port: 5000 }) ]});Assim, você pode analisar logs em tempo real, criar dashboards e alertas.
4. Segurança no Registro
Nunca registre dados sensíveis: senhas, tokens, números de cartão de crédito. Use filtros ou funções de mascaramento.
Exemplo de mascaramento de dados
function maskSensitive(obj) { const masked = { ...obj }; if (masked.password) masked.password = '***'; if (masked.token) masked.token = '***'; return masked;}
logger.info('Requisição do usuário', maskSensitive(req.body));Isso protegerá você contra vazamentos e ajudará a cumprir o GDPR.
Conclusão
Nesta parte, abordamos as principais práticas de registro em aplicações JavaScript com Node.js: logs estruturados, rotação, integração com sistemas externos e segurança. Essas técnicas ajudarão você a criar sistemas confiáveis e fáceis de manter. Para aprendizado, recomendamos começar com Winston e gradualmente implementar ferramentas mais complexas. JavaScript para iniciantes pode parecer difícil, mas a prática o tornará um profissional. Boa sorte na programação!