Esta é uma postagem rápida sobre como implementar um manipulador de exceção global no .NET 6.0.
Um manipulador de erros global é utilizado para capturar todos os exceptions e remover a necessidade de criar vários códigos de tratamento em toda aplicação .NET.
Neste exemplo utilizaremos o middleware e Serilog para centralizar as configurações de captura e destino da coleta de logs.
Pré-requisitos
- Visual Studio 2022 (.NET 6.0)
- Nuget package Serilog.AspNetCore, Serilog.Enrichers.Environment e Serilog.Exceptions
Middleware
Os middlewares basicamente são componentes que definem o pipeline de execução das chamadas HTTP, ou seja, todos os passos que uma solicitação faz dentro da aplicação desde a sua request até o response. Eles são encadeados, então, um middleware pode executar outro através de delegates repassando o mesmo contexto da requisição.
O primeiro middleware necessário criar é o ErrorHandlingMiddleware, responsável por capturar todos os erros (sem tratamento) da aplicação:
O segundo middleware (RequestSerilLogMiddleware) será utilizado para capturar informações adicionais, como por exemplo: e-mail do usuário credenciado, IP do usuário e informações do header.
Em seguida, é necessário configurar o Serilog, informando os principais enrich para adicionar mais informações no registro do log:
E por fim, na classe program.cs, é necessário registrar a utilização dos dois middlewares criados:
Testando
Ao executar a API, é possível testar a coleta de erros chamando o endpoint /api/log/exception, que lança um erro no controller da aplicação e é capturado pelo middleware ErrorHandlingMiddleware:
Finalizando
A captura de exceções é uma parte crucial em todas as aplicações e a utilização de middleware é o modo mais seguro da sua aplicação não “desarmar” por falta de tratamento de erros, além de ser um local centralizado para coletar logs, personalizar mensagens de retorno e obter informações do usuário credencial.
Os detalhes completos deste exemplo você encontra no meu GitHub: https://github.com/hgmauri/exceptions-handler
[…] Este middleware é utilizado como tratamento global de erros, conforme mencionado neste artigo. […]
[…] Os detalhes completos deste exemplo você encontra no meu GitHub: https://github.com/hgmauri/sample-iexceptionhandler e neste post. […]