Como implementar log e também registrar nos logs seus request e response no .NET ?
Nessa vida de Dev, sempre aparece um dia a necessidade de obter request´s e response´s feitos para uma API, se não tivermos nenhuma ferramenta como NewRelic ou Stackify, podemos fazer uso de um Middleware.
Mas o que é um Middleware? O middleware é um software montado em um pipeline de aplicativo para manipular solicitações e respostas.
Então caso queiramos fazer logging numa aplicação legada como .NET Framework ou versões Core abaixo da 6, temos que implementar tudo manualmente (vide post específico), mas caso queira fazer isto no .NET 6, a solução é muito mais fácil de implementar.
Muito cuidado, atentem-se para as implicações legais da Lei Geral de Proteção à dados, pois request e response normalmente levam dados dos usuários e muitas vezes são sigilosos! No próprio site da Microsoft há um alerta !
Então vamos ao código.
Para começar, iremos utilizar na implementação o Serilog, para que possamos logar em arquivo e console nossa operação.
Os pacotes que temos que instalar são:
Serilog.AspNetCore
Serilog.Sinks.Console
Serilog.Sinks.File
Feito isto, temos 2 passos a seguir:
1- Vamos criar uma classe estática para fazer a configuração do Logger e assim deixar o código muito mais limpo no “program.cs”.
2 — ajustar nosso “program.cs” para que implemente o Serilog, como criamos a função anteriormente, agora ficou muito mais fácil e bonito, precisando apenas de uma linha de código.
3- inserir a configuração de logging no appsettings.json
Detalhe importante é o campo da linha 12, onde se define o nível de “informação” do log, temos vários valores possíveis (Vide documentação).
Vamos testar, para isto, enviei um POST de um novo produto para testar a aplicação, no seu log podemos ver o seguinte registro agora:
Nele podemos ver o Request e o Response, além de detalhes sobre o código de resposta.
Agora vamos incorporar também os Headers?
Então, com a adição deles, teremos mais informações sendo logadas, no nosso caso, como não estamos utilizando autenticação, nem headers na nossa requisição, não teremos muita coisa sendo logada fora o padrão mesmo, mas pode-se ver que há mais informações no retorno.
Mais importante, é que isto só seja utilizado em caso de necessidade, por que logar todas as requisições além de um risco à segurança, também vai gerar um volume muito grande de informações.
Portanto, podemos ajustar a configuração, para somente logar Request e Response de acordo com a configuração da variável “Environment” deixando habilitado apenas para “Development”.
Gostou do artigo? clique no ícone👏e me siga para ver as próximas publicações !!
Fontes: