Como configurar logs para monitorar sua aplicação Node.js

Configurar logs no Node.js é essencial para monitorar a aplicação em produção, diagnosticar problemas e acompanhar o comportamento do sistema. Descubra como fazer isso de maneira eficiente.

O que são logs e por que são importantes no Node.js?

Logs são registros que armazenam informações sobre a execução da sua aplicação, permitindo acompanhar o comportamento do sistema ao longo do tempo. No Node.js, logs ajudam a diagnosticar erros, monitorar desempenho, acompanhar o fluxo de requisições e identificar problemas em tempo real. Configurar logs é uma das práticas essenciais para manutenção e monitoramento de uma aplicação em produção.

No Node.js, você pode usar diversas bibliotecas e técnicas para registrar logs de diferentes tipos de informações, desde erros críticos até informações mais detalhadas sobre o processo da aplicação.

Neste tutorial, vamos aprender a configurar logs de forma eficiente no Node.js, utilizando bibliotecas como Winston e Morgan, além de ver como integrar os logs ao console, ao arquivo de log e até aos sistemas de monitoramento externos.

1. Configurando logs simples com o console

A forma mais simples de adicionar logs em uma aplicação Node.js é usar o console. O console.log(), console.error() e outros métodos de console são usados para exibir informações no terminal ou stdout durante a execução.

Exemplo de log simples no console:

console.log('Mensagem de log');  // Exibe no console
console.error('Mensagem de erro');  // Exibe erro no console

O console.log() é usado para exibir mensagens gerais, enquanto o console.error() é utilizado para exibir erros. Embora seja útil para desenvolvimento local, o uso exclusivo do console para logs em produção não é ideal, pois você não tem um controle adequado sobre o armazenamento e análise desses logs.

2. Usando o Winston para logs em Node.js

Winston é uma das bibliotecas mais populares para logs no Node.js. Ele permite que você registre logs em diferentes níveis, como info, warn, error, e também ofereça suporte a vários transportes, como arquivos, console, banco de dados ou sistemas de monitoramento externos como o Loggly e o Graylog.

Passo 1: Instalando o Winston

Para instalar o Winston, execute o seguinte comando:

npm install winston --save

Passo 2: Configurando o Winston

Aqui está um exemplo básico de configuração de logs usando o Winston:

const winston = require('winston');

const logger = winston.createLogger({
    level: 'info',
    transports: [
        new winston.transports.Console(),  // Logs para o console
        new winston.transports.File({ filename: 'app.log' })  // Logs para um arquivo
    ],
});

logger.info('Mensagem de info');
logger.error('Mensagem de erro');

Neste exemplo, configuramos o Winston para gravar logs no console e em um arquivo app.log. O nível de log é configurado como info, o que significa que ele vai registrar logs de info, warn, error, e outros níveis mais altos.

3. Usando o Morgan para logs de requisições HTTP

Morgan é uma biblioteca específica para registrar logs de requisições HTTP em uma aplicação Node.js. Ela é comumente usada em conjunto com o Express.js para monitorar as requisições feitas à aplicação e registrar detalhes como o método, a URL, o status da resposta e o tempo de resposta.

Passo 1: Instalando o Morgan

Para instalar o Morgan, execute o comando:

npm install morgan --save

Passo 2: Configurando o Morgan no Express

Aqui está um exemplo de como configurar o Morgan em uma aplicação Express:

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

const app = express();

// Configura o Morgan para registrar as requisições no console
app.use(morgan('combined'));

app.get('/', (req, res) => {
    res.send('Hello World');
});

app.listen(3000, () => {
    console.log('Server is running');
});

No exemplo acima, o Morgan é configurado para registrar as requisições no formato combined, que inclui detalhes como o método HTTP, a URL da requisição, o status da resposta, entre outros.

4. Integrando Winston e Morgan para logs completos

Você pode combinar o Winston e o Morgan para ter um sistema completo de logging. O Winston pode ser configurado para registrar logs de erro e informações gerais, enquanto o Morgan pode ser usado para registrar requisições HTTP.

Aqui está como você pode integrar ambas as bibliotecas em uma aplicação Express:

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

const app = express();

// Configura o Winston para gravar logs em arquivo e console
const logger = winston.createLogger({
    level: 'info',
    transports: [
        new winston.transports.Console(),
        new winston.transports.File({ filename: 'app.log' })
    ],
});

// Usa o Morgan para registrar as requisições HTTP
app.use(morgan('combined', { stream: { write: message => logger.info(message) } }));

// Exemplo de rota
app.get('/', (req, res) => {
    res.send('Hello World');
});

app.listen(3000, () => {
    console.log('Server is running');
});

Neste exemplo, todas as requisições HTTP são registradas com Morgan, enquanto os logs de informações gerais e erros são gravados pelo Winston.

5. Conclusão

A configuração de logs no Node.js é fundamental para monitorar sua aplicação, identificar erros e problemas de desempenho, e garantir que sua aplicação esteja funcionando corretamente em produção. Usando bibliotecas como Winston e Morgan, você pode criar um sistema robusto de logs que ajuda a depurar e monitorar sua aplicação de forma eficaz.

Lembre-se de configurar logs de diferentes níveis para registrar informações importantes e detectar falhas rapidamente. Utilize o Winston para gravar logs persistentes e o Morgan para monitorar as requisições HTTP, garantindo que você tenha uma visão completa sobre o comportamento da sua aplicação.

A utilização de logs no Node.js é uma prática essencial para a manutenção e monitoramento contínuo da aplicação. Em ambientes de produção, é importante registrar eventos chave, como requisições HTTP, erros, e outros comportamentos significativos, para que você possa detectar falhas ou problemas de desempenho rapidamente.

Ao configurar uma boa estratégia de logs, você melhora a capacidade de depuração e facilita a resolução de problemas em tempo real. Bibliotecas como Winston e Morgan oferecem flexibilidade para registrar logs em diversos formatos e destinos, incluindo arquivos locais, bancos de dados e sistemas de monitoramento externos, como Loggly e Graylog.

Algumas aplicações:

  • Registrar erros críticos e falhas em APIs e serviços de backend.
  • Monitorar requisições HTTP e análise de performance em tempo real.
  • Integrar logs com sistemas de monitoramento externos para relatórios e alertas automáticos.
  • Armazenar logs de interações com banco de dados e outras operações de I/O.
  • Usar logs para auditoria e rastreamento de atividades em aplicações de alta segurança.

Dicas para quem está começando

  • Use Winston para criar um sistema de logs robusto e escalável.
  • Adicione logs para cada erro e alerta importante em seu código.
  • Considere usar o Morgan para monitorar as requisições HTTP em tempo real.
  • Configure logs rotacionados para evitar o crescimento ilimitado de arquivos de log.
  • Utilize logs de diferentes níveis (info, warn, error) para facilitar o diagnóstico.

Contribuições de Cláudia Medeiros

Compartilhe este tutorial: Como configurar logs no Node.js?

Compartilhe este tutorial

Continue aprendendo:

Como usar o debugger do Node.js?

O Node.js possui uma ferramenta de depuração nativa que permite rastrear a execução do código, identificar falhas e melhorar a qualidade do seu código. Veja como utilizá-la de maneira prática e eficaz.

Tutorial anterior

Como capturar erros não tratados no Node.js?

Erros não tratados podem causar falhas inesperadas em uma aplicação Node.js. Descubra como capturar e tratar esses erros para melhorar a robustez da sua aplicação.

Próximo tutorial