Leodario.com

Leodario.com – Tudo sobre Tecnologia

Aula 38 – API JavaScript, Node.js e Express – Logging Middleware – morgan, winston

Imagem destacada da aula de API

Introdução (3 min)

Imagine um detetive investigando um crime. Ele precisa registrar cada pista, cada interrogatório, cada passo da investigação. Sem esse registro, fica impossível reconstruir os eventos e encontrar o culpado. Da mesma forma, em uma aplicação web, precisamos registrar tudo o que acontece para entender o comportamento do sistema, diagnosticar problemas e otimizar o desempenho. Este registro é chamado de logging e é essencial para APIs modernas.

Nesta aula, você vai dominar a arte do logging em Node.js/Express usando dois pacotes poderosos: morgan para logs de requisições HTTP e winston para logs de aplicação mais complexos. Você entenderá a importância do logging profissional e como implementá-lo com as melhores práticas.

Dentro do ecossistema Node.js/Express, o logging se integra com middlewares, permitindo interceptar requisições e registrar informações relevantes antes, durante e depois do processamento.

Conceito Fundamental (7 min)

Logging é o processo de registrar eventos e informações relevantes durante a execução de uma aplicação. Isso inclui detalhes sobre requisições HTTP, erros, avisos, informações de depuração e qualquer outro dado valioso para monitoramento e análise.

Logs de requisição mostram quem acessou a API, quando, qual endpoint foi chamado e o resultado da operação. Logs de aplicação, por outro lado, registram eventos internos, como o início e fim de processos, resultados de cálculos e outras informações específicas do seu código.

Imagine um e-commerce. Logs de requisição podem rastrear a jornada do cliente pelo site, enquanto logs de aplicação podem registrar o processamento de um pagamento ou a atualização do estoque. Essa informação é vital para entender o comportamento do usuário, identificar gargalos de performance e solucionar problemas rapidamente.

O logging se integra com ferramentas de monitoramento e análise, possibilitando visualização de dados em tempo real e geração de relatórios. Isso facilita a identificação de tendências, a previsão de problemas e a tomada de decisões estratégicas.

Vantagens: Monitoramento, Depuração, Auditoria, Análise de Performance.
Desvantagens: Impacto na performance (se mal configurado), Armazenamento de dados.

Implementação Prática (10 min)

// Instale as dependências: npm install express morgan winston

const express = require('express'); const morgan = require('morgan'); const winston = require('winston');

const app = express(); const port = 3000;

// Configure o Winston para logs de aplicação const logger = winston.createLogger({ level: 'info', // Nível mínimo de log format: winston.format.combine( winston.format.timestamp(), winston.format.json() // Formato JSON para fácil parse ), transports: [ new winston.transports.Console(), // Log no console new winston.transports.File({ filename: 'error.log', level: 'error' }), // Logs de erro em arquivo separado ], });

// Use morgan para logs de requisição (formato 'combined') app.use(morgan('combined'));

app.get('/', (req, res) => { logger.info('Requisição recebida na rota /'); // Log de aplicação res.send('Olá, mundo!'); });

app.get('/erro', (req, res) => { try { // Simulando um erro throw new Error('Erro simulado'); } catch (error) { logger.error(error.message, { stack: error.stack }); // Log de erro com stack trace res.status(500).send('Erro interno do servidor'); } });

// Inicie o servidor app.listen(port, () => { console.log(Servidor rodando em http://localhost:${port}); });


Inicie a aplicação: node index.js

📚 Informações da Aula

Curso: API Completo - Node.js & Express

Tempo estimado: 25 minutos

Pré-requisitos: JavaScript básico

Este código demonstra a configuração básica do morgan e winston. O morgan registra as requisições HTTP no console, enquanto o winston permite criar logs de aplicação mais detalhados, com diferentes níveis de severidade e formatos de saída. Observe o uso do formato JSON para os logs do winston, que facilita o parse e a análise posterior. A configuração para HostGator Plano M seria a mesma, garantindo compatibilidade total.

Exercício Hands-On (5 min)

Crie um novo endpoint /produtos que liste alguns produtos fictícios. Implemente logging com winston para registrar cada acesso a esse endpoint, incluindo o método HTTP utilizado e o horário da requisição. Adicione também um tratamento de erro que registre qualquer exceção que ocorra durante o processamento da requisição.

Solução: Adicione o seguinte código dentro do bloco principal do seu arquivo:

app.get('/produtos', (req, res) => {
    try{
        logger.info(Acesso a /produtos via ${req.method} em ${new Date()});
        res.json([{nome: 'Produto A'}, {nome: 'Produto B'}]);
    } catch (erro){
        logger.error(erro.message, { stack: erro.stack });
        res.status(500).send('Erro interno do servidor');

} });

Teste: Acesse a rota /produtos no seu navegador ou via Postman. Verifique os logs no console e no arquivo error.log (caso ocorra algum erro).

Troubleshooting: Se os logs não estiverem aparecendo, verifique se os pacotes morgan e winston estão instalados corretamente e se o servidor está rodando. Certifique-se também de que o nível de log configurado no winston permite a exibição das mensagens desejadas.

Próximos Passos: Explore outras funcionalidades do winston, como diferentes transports (ex: envio de logs para um serviço externo) e formatos de log. Experimente com diferentes níveis de log para controlar a quantidade de informação registrada.

🚀 Pronto para a próxima aula?

Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!

📚 Ver todas as aulas