Cursos / Informática para Internet / Desenvolvimento Backend / Aula

arrow_back Aula 12 - Depuração e manipulação de erros

Logs: o que é e como fazer


Log é um registro de tudo que aconteceu na execução do programa, que serve para análise de erros e compreensão do funcionamento da aplicação.

Utilizando o winston

A biblioteca winston auxiliará no uso de logs. Para usá-la, é preciso fazer a instalação executando, no terminal, o comando:

 npm install winston

Após isso, é preciso configura-lá. Então, crie um arquivo, nomeando-o de 'logger.js' na pasta utils.

Com o arquivo já criado, insira o código abaixo:

const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf } = format;

const myFormat = printf(({ level, message, label, timestamp }) => {
  return `${timestamp} [${label}] ${level}: ${message}`;
});

const logger = createLogger({
  format: combine(
    label({ label: 'right meow!' }),
    timestamp(),
    myFormat
  ),
  transports: [new transports.Console()]
});

module.exports = logger

Agora, abra o arquivo 'index.js', importe logger e troque todos os console.log() por logger.info(). O arquivo ficará conforme o modelo abaixo:

app.listen(8080, () => {
    logger.info(`Iniciando no ambiente ${process.env.NODE_ENV}`)
    logger.info('Servidor pronto na porta 8080')
})

Configurando novos transportes

Com essa configuração acima, o log vai ser escrito apenas no console. Porém, queremos salvá-lo em um arquivo e para fazer isso é preciso configurar, em 'logger.js', um novo transporte, se vê abaixo:

new transports.File({
    filename: "logs/app-log.log",
    level: 'debug'
})]

Com isso, as informações serão salvas em um arquivo que será criado automaticamente. Mas, ainda assim, seria interessante criar um log no nível debug. Para isso, no entanto, é necessário antes criar um middleware.

Criando um middleware

Crie um arquivo chamado 'log.mid.js' na pasta middleware e implemente o código abaixo:

    const logger = require("../utils/logger");

    function logar(req, res, next){
            logger.debug('Requisição %s na rota %s', req.method, req.path)
            next()
    }

    module.exports = logar

Também é preciso registrar esse novo middleware no 'index.js'.

Atualizando o arquivo de logger

Acompanhando a aula, serão feitas algumas pequenas alterações, explicadas no vídeo, no arquivo de 'logger.js'. Ao final, o arquivo deverá ficar conforme o modelo abaixo:

const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf } = format;

const myFormat = printf(({ level, message, label, timestamp }) => {
  return `${timestamp} [${level}] ${message}`;
});

const logger = createLogger({
  format: combine(
    format.splat(),
    timestamp(),
    myFormat
  ),
  transports: [new transports.Console({
      level: 'debug'
  }), new transports.File({
    filename: "logs/app-log.log",
    level: 'debug'
  })]
});

module.exports = logger

Versão 5.3 - Todos os Direitos reservados