nodejs-morgan

NodeJS: Usando Morgan para salvar log das requests

Introdução

O Morgan é uma biblioteca que pode ser utilizada no NodeJS para salvar o log das requisições feitas a API.

E o uso do Morgan no Node pode ser importante, pois com ele, é possível monitorar todos os dados de entrada de sua API, verificar se tem algum dado incorreto que está sendo enviado e entre outros casos de uso.

Esse monitoramento pode facilitar, integração de terceiros com a sua API, integração de outras partes do seu código e muito mais.

Além da biblioteca do Morgan, tem uma variação dela chamada Morgan-body, que com ela, é possível salvar os dados do corpo da requisição, coisa que só com o Morgan não é possível.

Por padrão, os dados de log são impressos no terminal, porém é possível salvar os logs em arquivo, e assim manter o histórico de todas as requisições da API.

Outra possibilidade com os logs salvos no arquivo, é fazer arquivo de log rotativo, basicamente é criar um arquivo de texto para cada dia, dessa forma, caso o log de um mês atrás por exemplo não seja mais útil, é possível excluí-lo dando lugar a outro log.

Primeiro exemplo com Morgan

Para o primeiro exemplo, tenha um projeto Node já instalado, caso você não saiba fazer isso, vou deixar um link aqui.

Dentro da pasta desse projeto, primeiramente é necessário instalar as dependências que serão utilizadas, que serão a do Express, Body-parser e Morgan-body. O Body-parser será utilizado para pegar os dados da request.

Para instalar as dependencias:

> npm install express body-parser morgan-body

Dentro da pasta raiz do projeto, crie um arquivo chamado server.js que é o arquivo que receberá o código.

Depois de instalado as dependências, dentro do server.js, é necessário realizar os imports, fazer um app.use no body-parser e posteriormente utilizar o morgan-body, depois disso, precisa ter uma rota, que pode ser para a / e usar o app.listen para iniciar o servidor o arquivo deve ficar assim:

import morganBody from 'morgan-body';
import express from 'express';
import bodyParser from 'body-parser';
 
const app = express();
 
app.use(bodyParser.json());
 
morganBody(app);

app.get('/', (req, res) => { 
    res.send(‘Ola mundo’) 
});

app.listen(3000, () => { 
    console.log('Rodando na porta 3000'); 
});

com isso o morgan já está sendo utilizado e já está configurado, basta acessar do navegador o endereço http://localhost:3000, e verificar no terminal, que já irá aparecer a requisição realizada.

Salvando o log em arquivo

Para salvar essa informação em arquivo, é necessário importar o fs e o path, que são para manipular arquivos e adicionar algumas configurações ao morgan, para que o funcionamento do arquivo fique correto e para que os logs sejam salvos.

Na aplicação é necessário criar uma pasta chamada “logs” dentro do src, no arquivo além das importações, é necessário criar a configuração que irá criar e inserir dados no arquivo, e depois é só passar esse arquivo ao morgan-body, que irá cuidar do resto. O server.js deve ficar assim:

import morganBody from 'morgan-body';
import express from 'express';
import bodyParser from 'body-parser';
const fs = require('fs');
const path = require('path');
 
const app = express();
 
app.use(bodyParser.json());

const log = fs.createWriteStream(
    path.join(__dirname, "./logs", `express.log`), { flags: "a" }
);
 
morganBody(app, {
    noColors: true,
    stream: log,
});

app.get('/', (req, res) => { 
    res.send(‘Ola mundo’) 
});

app.listen(3000, () => { 
    console.log('Rodando na porta 3000'); 
});

A constante log, irá conter os dados do arquivo, e posteriormente essa constante é passada para o morgan-body na opção stream. Além disso é necessário passar o noColors como true, para que o arquivo seja salvo corretamente, passando noColors como false, que é o padrão da variável, os logs ficarão desconfigurados dentro do arquivo.

Dessa forma, assim que iniciar novamente o servidor, dentro da pasta logs já irá conter o arquivo express.log, e as próximas requisições já serão salvas dentro dele.

Salvando log em arquivo rotativo

Essa opção é interessante, caso depois de um tempo se utilizar os logs antigos, eles podem ser excluídos. O log rotativo, nada mais é do que passar a data junto ao nome do arquivo, e com isso, cada dia terá um arquivo de log especifico, e caso não seja utilizado, pode ser deletado normalmente.

Para implementar essa solução, é necessário concatenar a data dentro do arquivo. Para trabalhar com datas, o moment é uma biblioteca que já traz uma série de recursos úteis, sua instalação no projeto é feita no terminal, com o comando:

> npm install moment

Após sua instalação, é preciso importá-lo no projeto e utilizar na frente do nome do arquivo, deixando o server.js dessa forma:

import morganBody from 'morgan-body';
import express from 'express';
import bodyParser from 'body-parser';
const fs = require('fs');
const path = require('path');
 
const app = express();
 
app.use(bodyParser.json());

const log = fs.createWriteStream(
    path.join(__dirname, "./logs", `express${moment().format('YYYY-MM-DD')}.log`), { flags: "a" }
);
 
morganBody(app, {
    noColors: true,
    stream: log,
});

app.get('/', (req, res) => { 
    res.send(‘Ola mundo’) 
});

app.listen(3000, () => { 
    console.log('Rodando na porta 3000'); 
});

Com essas mudanças, a cada dia a aplicação irá registrar o log em um arquivo diferente e posteriormente é possível realizar uma lógica para que estes sejam excluídos caso inutilizados.

Vídeo sobre o assunto

Caso você queira, gravei um vídeo sobre o morgan-body, onde mostro passo a passo como realizar todas essas configurações:

Conclusão

O morgan é muito interessante para salvar os logs da aplicação, e salvar essa informação pode ser muito útil no dia a dia, visto que a aplicação está sujeita a muitos acessos e nem todos podem ser feitos com sucesso, e saber quais falharam e com quais dados, pode ser valioso para resolver problemas mais rápido, as vezes antes mesmo do seu cliente abrir um chamado no suporte. Obrigado por ler até aqui, até o próximo post 🙂

Para ver outros canais onde o posto conteúdo, meu Github e também cursos, veja os Links do Programando Soluções.

Este conteúdo te ajudou de alguma forma?

Usamos cookies para lhe proporcionar a melhor experiência possível no nosso site. Ao continuar a usar este site, você concorda com o uso de cookies.
Ok
Privacy Policy