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!