ASP.NET MVC – Rastreando Exceptions utilizando StackTrace

Standard

Olá,

Neste artigo irei demonstrar como podemos realizar um rastreamento e tratamento de Exceptions geradas, utilizando para tanto um recurso do .NET chamado StackTrace. A classe StackTrace fica localizada dentro da referência System.Diagnostics, que por sua vez oferece classes que permitem a interação com os processos do sistema, logs de evento e contadores de performance.

Vamos iniciar criando um projeto simples de ASP.NET MVC e modificando a ActionResult  Index, localizada dentro do Controller Index para que fique da seguinte forma, conforme a Listagem 1:

 

Listagem 1

Como podemos ver, no momento em que a aplicação iniciar e chamar a ActionResult Index, uma exceção será gerada informando um erro de conversão de string para integer. Neste momento é chamado um método chamado TrataErro no próprio Controller que recebe como parâmetro a Exception gerada, após mantém o retorno do método em uma  ViewData chamada erro.

Até aqui não vimos nada de mais, porém, agora que vem o interessante. Vamos criar efetivamente o método TrataErro conforme a Listagem 2, atente-se apenas de importar o namespace System.Diagnostics:

 

Listagem 2

 

Note que no método é criado uma instância de StackTrace com base na Exception enviada como parâmetro. Observe que é realizado o rastreamento utilizando o método GetFrame.

Agora basta criarmos a ViewData erro na página Index para que o resultado do rastreamento seja exibido na página. Vamos criar conforme a Listagem 3:

 

Listagem 3

 

Pronto, basta executarmos nossa aplicação e veja na página o resultado do rastreamento!

 

Para mais informações sobre StackTrace clique aqui.

 

Até o próximo artigo.

4 thoughts on “ASP.NET MVC – Rastreando Exceptions utilizando StackTrace

  1. icemacs

    Primeiramente muito bacana o artigo, Estou começando em MVC e me ajudou muito. Uma coisa que fiz diferente do artigo foi criar uma classe na Controler, herdando da Controler, e dando um override no OnException….
    Dessa forma, independente de try/catch, o log é gravado. 🙂

    public class BaseController : Controller
    {
    protected override void OnException(ExceptionContext filterContext)
    {
    base.OnException(filterContext);

    this.GetLog().Error(filterContext.Exception);
    }

    private NLogLogger GetLog()
    {
    return new NLogLogger();
    }
    }

Leave a Reply

Your email address will not be published. Required fields are marked *