Este blog discutirá o valor de utilizar bibliotecas de registro e analisará as 10 ferramentas de registro mais bem avaliadas que encontramos para Node.js. No @playerzero, usamos as bibliotecas de registro node.js com frequência para criar e gerenciar eventos de registro. Saiba mais sobre como estamos trazendo nossa abordagem exclusiva para monitorar o que importa para aplicativos front-end e back-end hoje https://www.playerzero.app/
pino
Winston
Bunyan
Morgan
Loglevel
Log4js
Npmlog
rugido
Marcador
sinal
De uma perspectiva de alto nível, o log do Node.js é importante porque ajuda os desenvolvedores a rastrear os eventos e o desempenho de seus aplicativos, diagnosticar e corrigir problemas, monitorar o comportamento do sistema e tomar decisões informadas. O registro fornece um registro da atividade de um aplicativo, permitindo que os desenvolvedores identifiquem e depurem problemas, entendam o comportamento do usuário e melhorem o desempenho geral e a estabilidade do sistema. O log também pode ser útil em ambientes de produção para detectar e corrigir erros, monitorar o desempenho do sistema e detectar incidentes de segurança.
Sempre que algo dá muito errado em um aplicativo, os desenvolvedores têm a opção de rastrear sua origem por meio de um rastreamento de pilha. Mas… confiar apenas em rastreamentos de pilha apenas pinta metade de uma imagem. O rastreamento fornecerá informações sobre a execução de um aplicativo, incluindo o fluxo de solicitações, consultas ao banco de dados, chamadas de API externas e métricas de desempenho - o que pode ser bastante útil. Em geral, os traces são usados para entender o comportamento de um aplicativo em um nível granular e para identificar gargalos de desempenho.
O registro preenche a outra metade da imagem. Logging é o processo de registrar mensagens e eventos relacionados a um aplicativo, como erros, avisos, métricas de desempenho e informações de depuração. O login no Node.js é usado para diagnosticar problemas, entender o comportamento do usuário e melhorar o desempenho geral e a estabilidade de um aplicativo. Ele também fornece um registro da atividade em um aplicativo, permitindo que os desenvolvedores identifiquem e depurem problemas e tomem decisões mais informadas.
Há vários motivos pelos quais você deve usar as bibliotecas de registro Node.js:
Os níveis de log são uma maneira de categorizar a importância ou a gravidade das mensagens de log. Normalmente, existem vários níveis, variando de erros críticos a mensagens informativas, e cada nível é associado a um valor numérico que pode ser usado para filtrar mensagens de log em uma biblioteca. Aqui estão os níveis mais comuns:
nível de registro FATAL
Talvez sem surpresa, o nível de log FATAL
é um nível de gravidade que indica um erro crítico em um aplicativo - o que significa que os logs com um nível FATAL
indicam que o aplicativo não pode continuar a funcionar normalmente sem a intervenção do desenvolvedor.
Nível de log ERROR
O nível de log ERROR
indica que um aplicativo pode ser executado no momento, MAS está encontrando um problema. Normalmente, isso indica que uma tarefa necessária no aplicativo falhou - que houve uma exceção, comportamento inesperado ou entradas incorretas.
nível de registro WARN
WARN
é um nível de log menos grave que ERROR
, mas, mesmo assim, não deve ser ignorado. Os logs WARN
podem ser usados para identificar problemas proativamente e evitar que os problemas se tornem mais graves, pois indicam que algo em seu aplicativo pode se tornar um catalisador para um problema mais significativo.
nível de registro INFO
O nível de log INFO
é um tipo de mensagem de log usada em sistemas de log para indicar uma mensagem informativa geral. Geralmente é usado para registrar rotina, eventos esperados no aplicativo ou sistema, como o início de um processo, a conclusão de uma tarefa ou uma alteração no estado do sistema. Esses alertas geralmente podem ser ignorados, pois servem para confirmar que um aplicativo está funcionando corretamente.
nível de registro DEBUG
Normalmente, o nível de log DEBUG
fornece informações úteis estritamente no processo de depuração. Os logs DEBUG
são o tipo mais detalhado de mensagem de log e fornecem uma visão granular do funcionamento interno de um aplicativo. O principal objetivo dos logs DEBUG
é ajudar os desenvolvedores a entender o que o sistema está fazendo, identificar bugs e problemas e diagnosticar problemas.
Pino é uma ferramenta de registro muito popular e estabelecida há muito tempo, com mais de 10,9 mil estrelas do Github e milhões de downloads no npm. Pino é uma biblioteca de registro popular para Node.js porque fornece vários recursos importantes que a tornam adequada para uso em aplicativos Node.js:
Fast - Pino é projetado para ser rápido e leve, com foco no desempenho. Ele usa um formato binário para mensagens de log, o que permite gerar saída de log de forma rápida e eficiente.
Logs estruturados - Pino registra mensagens no formato JSON, o que permite fácil análise, filtragem e análise de dados de log. Isso torna mais fácil pesquisar, visualizar e analisar dados de log e integrar dados de log em outros sistemas.
Fácil de estender - Pino foi projetado para ser altamente extensível e inclui vários plug-ins integrados que podem ser usados para adicionar funcionalidades adicionais, como gravar dados de log em um arquivo ou enviar dados de log para um servidor remoto.
Baixa sobrecarga - Pino é uma biblioteca de registro Node.js altamente eficiente devido à sua utilização mínima de recursos. O processo de registro com o Pino acumula mensagens gradativamente, levando a um estrangulamento do aplicativo e a uma diminuição do número de solicitações por segundo. A limitação é uma técnica em que a função conectada a um evento é acionada para ser executada apenas uma vez dentro de um período de tempo especificado, mesmo que o evento seja acionado várias vezes.
Transportes - Pino oferece uma variedade de opções para enviar logs, incluindo gravação em arquivos, exibição no console e utilização de plataformas como Sentry, Azure Application Insights e CouchDB.
Para usar o Pino em um aplicativo Node.js, siga estas etapas:
Para instalar o Pino, basta instalá-lo executando o seguinte comando em um novo diretório:
npm install pino
Importar - em seu aplicativo Node.js, importe Pino adicionando a seguinte linha de código na parte superior do arquivo:
const pino = require('pino');
Inicialização - inicialize o Pino criando uma instância do logger, por exemplo:
const logger = pino({ level: 'info' });
Este script produz logs com um nível de log de INFO
e superior no console.
Ao definir o nível para info, Pino registrará mensagens com um nível de registro de INFO
, WARN
, ERROR
e FATAL
. Mensagens com um nível de registro abaixo INFO
, como DEBUG
, não serão registradas.
Esse código cria apenas uma instância do registrador Pino com o nível de log definido como INFO. Nenhuma mensagem de log é gerada ou exibida até que você registre algo usando a instância do criador de logs. Por exemplo:
logger.info('This is an info message');
Isso produziria a seguinte saída no console:
{"level":30,"time":1624825088703,"msg":"This is an info message","pid":1234,"hostname":"my-machine"}
Os dados registrados exibidos no console incluem o nível de registro, o registro de data e hora em que foi registrado, a mensagem sendo registrada, um identificador para o registro e o nome do host.
Logging - você também pode usar a instância logger
para registrar outras mensagens em seu aplicativo. Por exemplo:
logger.warn('This is a warning message'); logger.error('This is an error message');
Saída - por padrão, Pino registra no console. Se quiser alterar a saída, você pode usar um dos transportes disponíveis do Pino que mencionamos anteriormente, como gravar em um arquivo, enviar logs para um serviço remoto como o Sentry ou usar o Azure Application Insights. Para obter mais informações, consulte a seção "Transportes conhecidos" de Pino.
O recurso de formatador NDJSON pino-pretty
básico do Pino é um ótimo formatador simples para logs do Pino e é fácil de configurar. Veja como colocá-lo em funcionamento:
Etapa 1 - instale o pino-pretty como uma dependência em seu projeto Node.js executando o seguinte comando em seu terminal:
npm install pino-pretty
Passo 2 - importe pino-pretty
em seu aplicativo Node.js adicionando a seguinte linha de código na parte superior de seu arquivo:
const pino = require('pino'); const pinoPretty = require('pino-pretty'); const logger = pino({ level: 'info' }); logger.pipe(pinoPretty());
Com esses dois trechos de código, você instalou pino-pretty
e o configurou para formatar seus logs do Pino. Agora você pode usar a instância do logger para registrar mensagens em seu aplicativo e os logs serão exibidos em um formato bonito e legível por humanos no console.
Aprenda ainda mais sobre depuração com Pino em Como depurar Node.js com as melhores ferramentas disponíveis por @RisingStack
Com mais de 20.000 estrelas no GitHub, Winston é uma biblioteca de registro muito popular para Node.js. Winston é uma biblioteca de registro exclusiva no ecossistema Node.js devido ao seu conjunto abrangente de recursos e facilidade de uso. Algumas das razões pelas quais Winston se destaca são:
Para instalar o Winston em seu projeto Node.js, você pode usar o gerenciador de pacotes npm executando o seguinte comando em seu terminal:
npm install winston
Depois que a instalação estiver concluída, você poderá importar e usar o Winston em seu código Node.js incluindo a seguinte linha:
const winston = require('winston');
Você pode usar a biblioteca Winston para configurar e criar suas instâncias de registro, por exemplo:
const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.Console() ] });
Isso cria uma instância do criador de logs com um nível de informação e um transporte de console. Você pode usar essa instância do logger para registrar mensagens em seu aplicativo, por exemplo:
logger.info('Hello World');
Isso registrará a mensagem Hello World
no console com o nível de registro de informações.
O Winston está equipado com seis níveis de registro padrão, organizados de acordo com as diretrizes descritas no documento RFC5424. Os níveis recebem prioridade numérica, com a gravidade mais alta sendo atribuída ao número mais baixo. Os seis níveis e seus respectivos valores de prioridade são:
{ error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6 }
Para cada um dos seis níveis de log, existe um método correspondente no objeto logger:
logger.error('error'); logger.warn('warn'); logger.info('info'); logger.verbose('verbose'); logger.debug('debug'); logger.silly('silly');
Você também pode passar uma string representando o nível de registro para o método log():
logger.log('error', 'error message'); logger.log('info', 'info message');
A propriedade level
no logger
determina quais mensagens de log serão passadas para os transportes que você configurou. Por exemplo, se a propriedade level
for definida como info
, apenas as entradas de log com uma gravidade de info
ou superior serão gravadas e todas as outras serão despriorizadas. Isso significa que na configuração atual, apenas mensagens de log com níveis de info
, warn
e error
serão exibidas.
Bunyan é uma biblioteca de log exclusiva para Node.js devido ao seu foco em tornar os dados de log mais estruturados e legíveis (eles conseguem isso serializando logs como objetos JSON em vez de texto simples). Veja por que Bunyan tem 7 mil estrelas no Github:
Para instalar o Bunyan, você pode executar o seguinte comando em seu terminal ou prompt de comando:
npm install bunyan
Isso instalará a biblioteca Bunyan e suas dependências em seu projeto Node.js. Depois de instalada, você pode exigir a biblioteca em seu código e começar a usá-la.
Importe o Bunyan em seu projeto - na parte superior do seu arquivo JavaScript, adicione a seguinte linha:
const bunyan = require('bunyan');
Crie uma instância do logger - em seguida, crie uma instância do logger usando o seguinte código:
const logger = bunyan.createLogger({ name: 'my-app-name', level: 'info' });
Neste exemplo, name
é o nome do seu aplicativo e level especifica o nível mínimo de logs que você deseja ver.
Registrar uma mensagem - para registrar uma mensagem, basta chamar um dos métodos de registro do Bunyan, como info, warning ou error, e passar a mensagem que deseja registrar, assim:
logger.info('This is an info log message'); logger.warn('This is a warn log message'); logger.error('This is an error log message');
Execute seu código - finalmente, execute seu código e você verá as mensagens registradas no console.
Por padrão, Bunyan gera logs no formato JSON, facilitando a análise e análise de logs com ferramentas de gerenciamento de log. Você também pode personalizar o formato usando a opção de streams do Bunyan.
Morgan é uma biblioteca de registro exclusiva para Node.js por vários motivos, principalmente por seu posicionamento exclusivo como middleware. Isso, entre outras razões, tornou-o muito popular, com 7,3 mil estrelas no GitHub no momento em que escrevemos. Aqui estão algumas razões pelas quais Morgan é tão popular:
Comece instalando o pacote morgan usando npm:
npm install morgan
Depois de concluir o processo de instalação, você precisa importar a biblioteca usando a função "require" e integrá-la ao seu aplicativo Express.js como middleware.
O código para isso ficaria assim:
var morgan = require('morgan'); app.use(morgan('dev'));
O argumento "dev" é uma opção de formato fornecida pelo Morgan. Morgan oferece cinco formatos de log diferentes, incluindo:
tiny
tem uma saída minúscula.short
inclui o tempo de resposta e abrevia o log por padrão.dev
fornece uma saída concisa e codificada por cores para uso durante o desenvolvimentocommon
também usa a saída de log combinada do Apache.combined
utiliza a saída de log combinada padronizada do Apache.
Você pode escolher entre esses formatos usando o argumento apropriado ao integrar o Morgan em seu aplicativo, conforme mostrado abaixo:
app.use(morgan('combined')); app.use(morgan('common')); app.use(morgan('dev')); app.use(morgan('short')); app.use(morgan('tiny'));
Loglevel é um pouco menos popular do que algumas das outras opções listadas aqui, com 2,4 mil estrelas no Github, mas ainda assim continua sendo uma biblioteca de registro leve e excelente. Aqui estão algumas razões pelas quais loglevel é uma biblioteca de registro exclusiva para Node.js:
Para configurar o nível de log, você precisa instalá-lo primeiro usando o npm:
npm install loglevel
Depois de instalá-lo, você pode importá-lo em seu projeto Node.js e começar a usá-lo definindo o nível de log:
const log = require('loglevel'); log.setLevel(log.levels.ERROR);
Ao definir o nível de log como ERROR,
você está especificando que apenas as mensagens de log com um nível de gravidade de ERROR
serão registradas. Depois de definir o nível de log, você pode usar os seguintes métodos para registrar mensagens em diferentes níveis:
log.trace('This is a trace message'); log.debug('This is a debug message'); log.info('This is an info message'); log.warn('This is a warning message'); log.error('This is an error message');
O nível de registro definido determinará quais mensagens serão registradas e quais serão ignoradas. Por exemplo, se o nível de log for definido como info, apenas as mensagens registradas usando log.info e log.warn ou log.error serão exibidas.
Claro, não poderíamos mencionar loglevel sem também listar seu irmão mais velho, Log4js. Log4js é uma biblioteca de registro JavaScript que foi iniciada como uma porta da popular biblioteca de registro Java Log4j. Ele foi criado para fornecer uma solução de log semelhante para aplicativos JavaScript e, desde então, evoluiu para fornecer capacidades e recursos de log avançados. Com mais de 5,6 mil estrelas no Github, aqui estão algumas das razões pelas quais o Log4js é tão popular:
Para instalar o Log4js, você pode usar o gerenciador de pacotes npm executando o seguinte comando em seu terminal:
npm install log4js
Isso instalará a versão mais recente do Log4js e suas dependências. Você pode exigir a biblioteca em seu aplicativo Node.js e começar a usá-la para registrar mensagens.
Para começar a usar o Log4js, primeiro exija-o em seu código e configure-o:
const log4js = require('log4js'); log4js.configure({ appenders: { console: { type: 'console' } }, categories: { default: { appenders: ['console'], level: 'info' } } }); const logger = log4js.getLogger();
Você pode então usar o logger para registrar mensagens em diferentes níveis:
logger.trace('Entering cheese testing'); logger.debug('Got cheese.'); logger.info('Cheese is Gouda.'); logger.warn('Cheese is quite smelly.'); logger.error('Cheese is too ripe!'); logger.fatal('Cheese was breeding ground for listeria.');
Aqui está um exemplo de uso do Log4js para registrar mensagens em vários anexadores (console e arquivo) com diferentes níveis de registro:
const log4js = require('log4js'); log4js.configure({ appenders: { console: { type: 'console' }, file: { type: 'file', filename: 'app.log' } }, categories: { default: { appenders: ['console'], level: 'info' }, file: { appenders: ['file'], level: 'error' } } }); const logger = log4js.getLogger(); const fileLogger = log4js.getLogger('file'); logger.info('This is an informational message'); fileLogger.error('This is an error message');
Neste exemplo, o registrador com a categoria "padrão" é configurado para registrar mensagens com informações de nível ou superior no console. O logger com a categoria "arquivo" está configurado para registrar mensagens com erro de nível ou superior ao arquivo. Os dois registradores podem ser usados alternadamente para registrar mensagens em seus respectivos anexadores.
O valor exclusivo do npmlog reside em sua simplicidade e sobrecarga mínima, tornando-o adequado para uso em projetos de pequena escala ou sensíveis ao desempenho. É fácil de configurar e integra-se perfeitamente com o ecossistema npm (o que não surpreende desde o utilitário logger oficial do npm), tornando-o uma escolha popular para desenvolvedores que procuram uma solução de registro leve. Aqui estão algumas razões pelas quais o npmlog fez a lista:
Para instalar o npmlog, você precisa ter o Node.js e o npm (Node Package Manager) instalados em sua máquina. Em seguida, você pode executar o seguinte comando em seu terminal ou prompt de comando:
npm install npmlog
Isso fará o download e instalará a versão mais recente do npmlog e suas dependências, permitindo que você o use em seu projeto Node.js.
Aqui está um exemplo de como usar o npmlog em um projeto Node.js:
const log = require('npmlog'); log.level = 'verbose'; log.verbose('This is a verbose message'); log.info('This is an informational message'); log.warn('This is a warning'); log.error('This is an error');
Neste exemplo, começamos exigindo o módulo npmlog
e atribuindo-o a uma variável. Em seguida, definimos o nível de log como verbose
, o que significa que as mensagens com nível de log verbose
, info
, warn
e error
serão exibidas. Em seguida, registramos as mensagens em níveis diferentes usando os verbose
, info
, warn
e error
.
Observe que, por padrão, o npmlog grava em process.stderr
. Se você precisar gravar em process.stdout
, poderá usar a propriedade log.stream
.
A biblioteca roarr é uma ferramenta de log Node.js projetada para produzir dados estruturados sem a necessidade de inicialização. Possui uma interface de linha de comando (CLI) e suporta variáveis ambientais, tornando-o versátil e fácil de usar. Além disso, o roarr é compatível com Node.js e ambientes de navegador, tornando-o uma solução de registro versátil para uma ampla gama de aplicativos.
Aqui estão alguns pontos-chave que destacam o valor exclusivo da biblioteca roarr:
Primeiro, instale o roarr usando npm:
npm install roarr
Em seguida, importe o roarr para o seu código e crie um logger:
const Roarr = require('roarr').default; const logger = new Roarr({ context: { service: 'my-service' } });
Registre mensagens usando o método log
:
logger.info('Hello, world!');
Por padrão, os logs do roarr serão enviados para o console. Você pode personalizar a saída do log especificando um fluxo diferente, como um arquivo, usando a opção stream
:
const Roarr = require('roarr').default; const fs = require('fs'); const logger = new Roarr({ context: { service: 'my-service' }, stream: fs.createWriteStream('./my-service.log') });
Este é apenas um exemplo básico de como usar o roarr. Há muito mais opções e recursos disponíveis, portanto, consulte a documentação oficial do roarr para obter mais informações.
Tracer é uma biblioteca de registro de software livre para aplicativos Node.js, desenvolvida pela comunidade Node.js. Ele foi projetado para fornecer uma maneira eficiente e flexível de registrar mensagens e informações de depuração em aplicativos Node.js. O Tracer foi mantido e desenvolvido ativamente por uma equipe de voluntários e está disponível para qualquer pessoa usar e contribuir no Github. Aqui estão alguns dos recursos que o tornam uma biblioteca de registro exclusiva:
O Tracer pode ser instalado usando o Node Package Manager (npm). Aqui estão os passos para instalar o Tracer:
npm install tracer
Isso instalará o Tracer como uma dependência em seu projeto. Você pode então exigi-lo em seu código e começar a usá-lo para registrar mensagens.
Aqui está um exemplo de como usar o Tracer em seu código:
const tracer = require('tracer'); const logger = tracer.console(); logger.info('Starting the application...');
Neste exemplo, primeiro precisamos da biblioteca Tracer e, em seguida, criamos um registrador de console usando o método tracer.console()
. Por fim, registramos uma mensagem informativa usando o método info
no objeto logger.
Aqui está outro exemplo de uso do Tracer:
const tracer = require('tracer'); const logger = tracer.dailyfile({root: './logs', maxLogFiles: 10}); logger.error('An error has occurred:', new Error('Something went wrong'));
Neste exemplo, estamos usando o método tracer.dailyfile
para criar um logger de arquivo que grava logs em um arquivo rotativo diário. A opção root
especifica o diretório onde os arquivos de log serão armazenados e a opção maxLogFiles
limita o número de arquivos de log que serão mantidos.
Por fim, registramos uma mensagem de erro usando o método error
no objeto logger, juntamente com um objeto error, fornecendo mais informações sobre o erro ocorrido.
Sua página do Github se orgulha de ser “hackeável e configurável até o núcleo”, e isso é uma parte importante do que torna o Signale uma biblioteca de registro tão amada na comunidade Node.js. A biblioteca foi criada como uma solução para as dificuldades que os desenvolvedores enfrentam ao tentar registrar mensagens em aplicativos Node.js, como logs confusos e difíceis de ler. Aqui está o que o destaca do pacote:
Para instalar o Signale, você pode usar o npm, o gerenciador de pacotes Node.js, executando o seguinte comando em seu terminal:
npm install signale
Como alternativa, você também pode usar yarn para instalar o Signale executando o seguinte comando em seu terminal:
yarn add signale
Depois de instalado, você pode importar o Signale para seu aplicativo Node.js e começar a usá-lo para registrar mensagens e informações de depuração.
Aqui está um exemplo de como importar o Signale para seu aplicativo Node.js e usá-lo para registrar mensagens:
const signale = require('signale'); // Log an info message signale.info('Starting up the server'); // Log a success message signale.success('Server started successfully'); // Log a warning message signale.warn('Low memory warning'); // Log an error message signale.error(new Error('An error occurred while processing data'));
Neste exemplo, importamos o Signale para nosso aplicativo Node.js usando a função require
. Em seguida, usamos os vários métodos de registro fornecidos pelo Signale, como info
, success
, warn
e error
, para registrar diferentes tipos de mensagens. Cada um desses métodos possui um símbolo e uma cor distintos, facilitando a identificação rápida do tipo de mensagem de log.
Você pode encontrar mais informações sobre como usar o Signale, incluindo métodos de registro adicionais e opções de personalização, na documentação do Signale .
Em busca de um método rápido e eficiente para depurar seus aplicativos Node.js? Confira uma ou mais das bibliotecas mencionadas neste artigo, cada uma delas é uma ótima opção. Pino, no entanto, é nossa biblioteca de registro pessoal de escolha pelo que vale a pena 😉
Essas bibliotecas de registro provaram ser cruciais ao depurar aplicativos Node.js em ambientes de teste/desenvolvimento e em produção.
Além disso, ao integrá-los a uma solução de monitoramento como o PlayerZero, você pode obter insights ainda maiores sobre o desempenho de seus aplicativos Node.js.
Publicado também aqui .