O registro é uma das etapas mais importantes e úteis que um desenvolvedor pode realizar ao trabalhar em Node.js. Na verdade, é uma das etapas mais úteis que um desenvolvedor pode realizar, independentemente de seu ambiente de execução! O registro ajuda os desenvolvedores a saber o que o código deles está realmente fazendo e pode ajudar os desenvolvedores a salvar horas de trabalho de depuração.
Um dos principais objetivos do registro é salvar informações sobre cada fluxo ou tempo de execução. Essas são as mesmas informações que um desenvolvedor usa para entender seu aplicativo. Por exemplo, se houver um bug na seção de banco de dados de um aplicativo, um log apontará para onde a falha ocorre, ajudando você a identificar a causa do problema.
Neste artigo, cobriremos algumas das melhores práticas para registro em Node.js e veremos por que registrar é uma boa ideia. Também compartilharei minhas recomendações sobre as cinco melhores ferramentas de monitoramento para aplicativos Node.js.
Login em Node.js
Antes de revisarmos as práticas recomendadas para registro no Node, é importante lembrar que nem todas as informações devem ser registradas. Por exemplo, dados pessoais, como informações do usuário, e dados delicados, como senhas e informações de cartão de crédito, não devem ser registrados. Também vale a pena notar que a ferramenta que você usa para registrar é muito menos importante do que sua abordagem de registro.
Nas seções a seguir, explicaremos as abordagens mais eficazes como parte das práticas recomendadas de registro em Node.js.
Comece com console.log
Alguns argumentam que deve ser uma prática regular ao construir um projeto paralelo ter console.log
em torno de seus aplicativos. Outros métodos de console incluem console.group
, console.info
, e métodos menos comuns como console.error
:
console.error ('Erro!');
Ao executar o console.log
, você pode notar uma diminuição insignificante no desempenho. Para evitar um impacto negativo no desempenho, recomendo mudar para uma biblioteca de registro quando seu projeto começar a se expandir.
Mover para uma biblioteca de registro
As bibliotecas de registro ajudam os desenvolvedores a criar e gerenciar eventos de registro, o que pode aumentar a eficiência geral e a funcionalidade de seu aplicativo. Algumas das bibliotecas de registro mais populares para Node são Winston , Bunyan e Log4js .
Se você deseja armazenar seu log de erros em um local remoto ou banco de dados separado, o Winston pode ser a melhor escolha porque oferece suporte a vários transportes. Bunyan também oferece suporte a vários transportes e vem com uma CLI para filtragem. Como alternativa, Log4js oferece suporte a fluxos de registro, como o registro em um console, e agregadores de registro como Loggly (usando um appender ).
Abaixo está um exemplo de como configurar uma biblioteca de registro usando Winston:
const winston=require ('winston'); const config=require ('./config'); const enumerateErrorFormat=winston.format ((info)=> { if (info instanceof Error) { Object.assign (info, {message: info.stack}); } informações de retorno; }); const logger=winston.createLogger ({ nível: config.env==='desenvolvimento'?'debug':'info', formato: winston.format.combine ( enumerateErrorFormat (), config.env==='desenvolvimento'? winston.format.colorize (): winston.format.uncolorize (), winston.format.splat (), winston.format.printf (({nível, mensagem})=> `$ {nível}: $ {mensagem}`) ), transportes: [ new winston.transports.Console ({ stderrLevels: ['erro'], }), ], }); module.exports=logger;
A questão é que, embora você deva quase sempre usar um console.log padrão, uma biblioteca de registro pode ser mais funcional e ajudar a evitar quedas no desempenho do aplicativo.
Registrar solicitações HTTP no Node com Morgan
Outra prática recomendada é registrar sua solicitação HTTP em seu aplicativo Node.js. Uma das ferramentas mais usadas para fazer isso é o Morgan , que obtém os logs do servidor e os sistematiza para torná-los mais legíveis.
Para usar Morgan, basta definir a string de formato:
morgan=requer ('morgan'); app.use (morgan ('dev'));
Para referência, a string de formato predefinido é:
Morgan ('minúsculo')
Abaixo está a saída esperada:
Configure Winston com Morgan
Se você optar por usar a biblioteca Winston, poderá configurar facilmente com Morgan:
const morgan=require ('morgan'); const config=require ('./config'); const logger=require ('./logger'); morgan.token ('mensagem', (req, res)=> res.locals.errorMessage ||''); const getIpFormat=()=> (config.env==='produção'?': remote-addr-':''); const successResponseFormat=`$ {getIpFormat ()}: método: url: status-: tempo de resposta ms`; const errorResponseFormat=`$ {getIpFormat ()}: método: url: status-: tempo de resposta ms-mensagem:: mensagem`; const successHandler=morgan (successResponseFormat, { ignorar: (req, res)=> res.statusCode>=400, stream: {write: (message)=> logger.info (message.trim ())}, }); const errorHandler=morgan (errorResponseFormat, { ignorar: (req, res)=> res.statusCode <400, stream: {write: (message)=> logger.error (message.trim ())}, }); module.exports={ successHandler, errorHandler, };
Como você pode ver no exemplo acima, para configurar o Winston com Morgan, você só precisa configurar o Winston para passar a saída do Morgan de volta para ele.
Defina l og l evels
Antes de embarcar em uma construção com sua equipe de desenvolvimento, é muito importante definir seus níveis de log para diferenciar os eventos de log. Gerenciar eventos de registro de maneira ordenada e consistente torna mais fácil obter as informações necessárias rapidamente.
Existem vários níveis de registro e é importante conhecê-los e seus usos. Cada nível de registro fornece uma orientação aproximada de quão importante e urgente é a mensagem. Abaixo estão os níveis comuns:
- Erro: eventos importantes que farão com que a execução do programa falhe
- Advertir: eventos cruciais que devem ser observados para evitar falhas
- Informações: eventos importantes que detalham uma tarefa concluída
- Depurar: usado principalmente por desenvolvedores
O desenvolvedor deve ser capaz de ver um evento detalhado e determinar se ele deve ser corrigido imediatamente.
Use l ogs com a l og m sistema s de gerenciamento
Dependendo do tamanho do seu aplicativo, pode ser útil extrair os logs do seu aplicativo e gerenciá-los separadamente usando um sistema de gerenciamento de log.
Os sistemas de gerenciamento de registros permitem que você rastreie e analise os registros conforme eles acontecem em tempo real, o que, por sua vez, pode ajudar a melhorar o seu código. Como você pode ver no exemplo abaixo, um sistema de gerenciamento de registro pode ajudá-lo a rastrear dados úteis, incluindo erros de back-end, anomalias, fontes de registro e erros de produção.
Para ferramentas de análise e gerenciamento de registros, recomendo Sentry, Loggly, McAfee Enterprise, Graylog, Splunk, Logmatic ou Logstash.
Ferramentas de monitoramento de saúde
As ferramentas de monitoramento de integridade são uma boa maneira de monitorar o desempenho do servidor e identificar as causas das falhas ou do tempo de inatividade do aplicativo. A maioria das ferramentas de monitoramento de saúde oferece rastreamento de erros, bem como alertas e monitoramento de desempenho geral. Alguns desenvolvedores consideram o rastreamento de erros particularmente frustrante em Node.js , portanto, o uso de uma ferramenta de monitoramento de integridade pode ajudar a aliviar algumas dessas dificuldades.
Abaixo estão algumas ferramentas de monitoramento populares para Node.js:
- PM2
- Sematext
- Appmetrics
- ClinicJS
- AppSignal
- Monitor de status expresso
Conclusão
Neste artigo, vimos a importância do registro em log e como ele pode ajudar os desenvolvedores a entender melhor seus aplicativos. Também discutimos as práticas recomendadas de registro em Node.js, incluindo o uso de uma biblioteca de registro, registro de solicitações HTTP, definição de níveis de registro e uso de um sistema de gerenciamento de registro.
Embora nenhuma infraestrutura seja completamente segura ou livre de erros, o registro é uma etapa necessária para os desenvolvedores que desejam monitorar a produção e reduzir os erros. O registro também pode ser útil para outros membros da equipe, incluindo controle de qualidade, suporte e novos programadores, pois salva informações valiosas para aprender e desenvolver.
A postagem Práticas recomendadas de registro em Node.js apareceu primeiro em LogRocket Blog .