Resolvido: Express e Eventos com Winston Logger Configurado Interrompe o Registro em Arquivo na Ocorrência de Erro
Introdução
No desenvolvimento de aplicativos JavaScript utilizando o ambiente Node.js, é comum o uso de frameworks como o Express para criar APIs e servidores web. Além disso, a biblioteca Winston é frequentemente utilizada para realizar o registro de logs em Node.js. Neste artigo, abordaremos a integração do Express com o Winston Logger, configurado de forma a interromper o registro em arquivo na ocorrência de erros. Exploraremos como a combinação dessas duas ferramentas pode ser benéfica para o desenvolvimento de aplicações robustas e escaláveis.
O que é o Express?
O Express é um framework web rápido, flexível e minimalista para Node.js. Ele fornece uma maneira simples de criar APIs e servidores web, permitindo a definição de rotas, middleware e muito mais. O Express é amplamente utilizado pela comunidade Node.js devido à sua simplicidade e eficiência.
O que é o Winston Logger?
O Winston Logger é uma biblioteca popular para registro de logs em Node.js. Ele oferece recursos avançados, como suporte a vários formatos de registro, níveis de log personalizáveis e transporte para diferentes destinos, como arquivos, consoles, bancos de dados, entre outros. O Winston é altamente configurável e adequado para uso em diversas aplicações.
Integrando o Express com o Winston Logger
A integração do Express com o Winston Logger pode ser feita de maneira simples e direta. Primeiramente, é necessário instalar as dependências necessárias. Para isso, utilize o npm (gerenciador de pacotes do Node.js) executando o seguinte comando:
Copy code
npm install express winston
Com as dependências instaladas, podemos prosseguir com a configuração do Winston Logger no Express. Vamos considerar um cenário em que desejamos interromper o registro em arquivo sempre que ocorrer um erro na aplicação.
javascript
Copy code
const express = require(‘express’);
const winston = require(‘winston’);
const app = express();
// Configuração do Winston Logger
const logger = winston.createLogger({
transports: [
new winston.transports.Console(), // Transporte para o console
new winston.transports.File({ filename: ‘app.log’ }) // Transporte para arquivo
]
});
// Middleware para registro de logs
app.use((req, res, next) => {
// Intercepta erros ocorridos durante o processamento da requisição
res.on(‘finish’, () => {
if (res.statusCode >= 400) {
logger.error([${req.method}] ${req.url} - ${res.statusCode});
} else {
logger.info([${req.method}] ${req.url} - ${res.statusCode});
}
});
next();
});
// Rotas da aplicação
app.get(‘/’, (req, res) => {
res.send(‘Olá, mundo!’);
});
// Middleware de tratamento de erros
app.use((err, req, res, next) => {
logger.error(err); // Registra o erro no Winston Logger
res.status(500).send(‘Ocorreu um erro interno.’);
});
// Inicialização do servidor
app.listen(3000, () => {
logger.info(‘Servidor iniciado na porta 3000.’);
});
Explicação do Código
No código acima, importamos as bibliotecas Express e Winston Logger. Em seguida, criamos uma instância do Express e configuramos o Winston Logger para utilizar dois tipos de transporte: o console e um arquivo chamado “app.log”. O transporte para o console é responsável por exibir os logs no terminal, enquanto o transporte para arquivo registra os logs em um arquivo específico.
Em seguida, definimos um middleware no Express para realizar o registro de logs a cada requisição recebida. Utilizamos o evento ‘finish’ do objeto de resposta (res) para capturar o momento em que a resposta foi enviada ao cliente. Verificamos se o código de status da resposta indica um erro (status code >= 400) e registramos a informação correspondente no Winston Logger.
Além disso, adicionamos um middleware de tratamento de erros para capturar erros não tratados nas rotas e registrar os detalhes no Winston Logger. Dessa forma, mesmo que um erro ocorra durante o processamento da requisição, ele será devidamente registrado e tratado.
Conclusão
Neste artigo, exploramos a integração do Express com o Winston Logger, configurado de forma a interromper o registro em arquivo na ocorrência de erros. Essa integração permite o desenvolvimento de aplicações Node.js mais robustas, fornecendo um registro detalhado de eventos e erros. O Winston Logger oferece uma ampla gama de recursos e opções de configuração, permitindo que os desenvolvedores personalizem o registro de logs de acordo com suas necessidades. Combinado com o poder do Express, essa solução é ideal para o desenvolvimento de aplicações escaláveis e confiáveis.