Este post é continuação do anterior sobre o ELMAH (leia a parte 1 aqui).
Vamos ver como utilizar o ELMAH em conjunto com HandleErrorAttribute, que é utilizado para capturar exceções não tratadas e exibir uma página amigável de erro.
Com o uso do HandleError e o <customErrors> do web.config em modo “On”, as exceções disparadas pela app NÃO serão logadas pelo ELMAH, uma vez que o HandleError já terá capturado-as e mostrado a view de erro especificada no <customErrors>.
Uma solução bem simples para isso é usarmos um filter global para logarmos manualmente as exceções pelo ELMAH.
Crie uma classe em seu projeto (por exemplo, em uma pasta Helpers) com o seguinte código:
using Elmah; public class ElmahHandleErrorFilter : IExceptionFilter { public void OnException(ExceptionContext context) { if (context.ExceptionHandled) ErrorSignal.FromCurrentContext().Raise(context.Exception); } }
Em seguida, registre o filter no método RegisterGlobalFilters do global.asax:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new ElmahHandleErrorFilter()); filters.Add(new HandleErrorAttribute()); }
Agora rode a aplicação (não se esqueça que o <customErrors> deve estar habilitado (mode=”On”) e uma exceção de teste sendo disparada no HomeController) e você deverá ver sua página padrão de erro.
Vá até o endereço (localhost)/elmah.axd e você verá que agora o ELMAH registrou a exception no log!! Simples!
No próximo post, veremos como proteger o acesso ao endereço do log (elmah.axd).
__________________________
Este artigo faz parte da série:
1) Tratando erros com Elmah no ASP.NET MVC (parte 1 – Configuração)
2) Tratando erros com Elmah no ASP.NET MVC (parte 2 – HandleError)
3) Tratando erros com Elmah no ASP.NET MVC (parte 3 – Segurança)
4) Tratando erros com Elmah no ASP.NET MVC (parte 4 – Filtros)
Participe! Vamos trocar uma ideia sobre desenvolvimento de software!