9 Práticas recomendadas de registro
O registro é uma ferramenta poderosa para solução de problemas e monitoramento de erros. Ele fornece um registro de eventos que ocorrem durante a execução de um programa. No entanto, é tão útil quanto o próprio conteúdo e formato. Um registro que exibe informações inúteis é um desperdício de poder computacional, armazenamento e dinheiro.
Na minha opinião, o log deve ser classificado como um cidadão de primeira classe em um sistema. Por isso, você deve tratar o log como um processo formal com as melhores práticas e um objetivo claro do que deseja alcançar.
Para começar, eu recomendo NÃO usar as bibliotecas de saída padrão fornecidas pelo seu idioma. Eles geralmente não possuem recursos fornecidos pelas bibliotecas de criação de log e devem ser usados apenas ao depurar localmente.
Aqui estão alguns exemplos de alternativas para a saída padrão de um idioma:
- Node.JS Winston
- Java Log4J
- Go Zap
Melhores Práticas
1. Teste seus registros
Não quero dizer testes de unidade. O que quero dizer é que, se você escrever logs, entre no seu serviço e dê uma olhada na saída. Responda o seguinte, é o que você esperava? Está faltando alguma coisa? Eles são compreensíveis? Você precisa de mais/menos contexto?
Compartilhe com um colega de equipe e pergunte se ele entendeu o resultado.
2. NÃO registre informações confidenciais!
NÃO registre informações confidenciais. Chaves de API, senhas, credenciais e muito mais se enquadram nessa categoria. É muito arriscado registrar qualquer coisa sensível, pois aumenta as chances de vazar e se tornar um problema de segurança.
❌
logger.error("Unable to log in", {request});
✅
logger.error("Unable to log in", {
username: request.user,
password: request.pass ? "[HIDDEN]" : null,
// any additional context needed?
})
O registro é tão benéfico quanto a mensagem no registro, portanto, seja específico.
❌
logger.info("We're starting!")
...
logger.info("task complete!")
✅
logger.info("Starting task", {
name: taskName,
params: params,
startTime: startTime
});
logger.info("task complete", {
response: output.response,
event: {
action: taskName,
duration: currentTime - startTime
}
})
Logar custa dinheiro. Os logs geralmente são armazenados em um arquivo e carregados no armazenamento onde podem ser analisados. Isso custa. Se o seu sistema respondeu a um milhão de solicitações, isso pode significar milhões e milhões de possíveis eventos de log a serem armazenados. Certifique-se de que eles estão registrando apenas dados relevantes.
5. Registre todos os erros
Os logs são os melhores amigos para quem está depurando, portanto, como programador, se você se encontrar em uma situação de manipulação de erros de gravação, certifique-se de sempre registrar o erro antes de lançar um diferente para o usuário. Por exemplo:
catch(err) {
logger.error('An error occured', {error: err, args: args});
throw new SystemError('Unable to process request');
}
6. Use os recursos do seu logger
A maioria dos registradores vem com um recurso realmente poderoso. Níveis de log. Eles permitem que você separe seus logs por ambiente contextual. Prod como ambientes, mostram apenas informações e erros. Depurar ambientes, mostrar tudo. Use também o ambiente para o que ele significa, não use o nível Info para erros!
7. Não use o nível `debug` para dados de monitoramento do sistema
Algumas vezes isso pega as pessoas desprevenidas, mas nem sempre você pode garantir que o ambiente será configurado para imprimir logs de nível `debug`. Portanto, se você estiver registrando um bit vital de dados usados para painéis, você desejará usar os níveis `info` ou `error` que são garantidos.
8. Certifique-se de manter os IDs de rastreamento nos logs
Este ponto é mais para sistemas distribuídos, mas se você estiver usando IDs de rastreamento em seu sistema. Registre-os! Descobrir jornadas através de um sistema sem elas é muito difícil!
9. Defina um padrão mínimo para o projeto
Defina um padrão de campos mínimos para logar dentro do seu sistema. Isso deve incluir latências de registro, durações de solicitação e IDs de rastreamento. Um padrão como esse permitirá que você identifique possíveis problemas de desempenho e seja proativo em vez de reativo ao resolvê-los.





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)