Tratamento global de erros no .NET 6.0

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

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

2 comentários

  1. […] Este middleware é utilizado como tratamento global de erros, conforme mencionado neste artigo. […]

Deixe uma resposta