Tratando erros com Elmah no ASP.NET MVC (parte 1 – Configuração)

Olá pessoal. I’m back!

Sabemos que toda aplicação que se preze deve ter algum tipo de log de erros, para que possamos visualizar todas as exceções não tratadas pela aplicação e corrigí-las o mais rápido possível.

Neste post vou mostrar como é bem simples logar erros em uma aplicação ASP.NET MVC utilizando o ELMAH (Error Logging Modules and Handlers), um ótimo componente para este fim, com uma série de recursos e compatível com ASP.NET MVC e ASP.NET WebForms. Dê uma olhada na página oficial.

No exemplo, mostrarei a instalação do ELMAH via NuGet e sua configuração para logar os erros em arquivos XML. (O ELMAH também dá suporte aos principais bancos de dados do mercado.)

————————————————————————–
Nota:  No exemplo estou utilizando a versão 1.2 do ELMAH, que é a versão mais recente até o momento de publicação deste artigo.
————————————————————————–

Instalando o ELMAH com suporte para log em arquivos XML

Supondo que você já tenha criado uma nova aplicação ASP.NET MVC 3 (pode ser a template vazia), vamos baixar e configurar o ELMAH usando o NuGet. Se você possui a última versão do MVC 3 instalada (ToolsUpdate), você já tem o NuGet à disposição. Não usa o NuGet??? Sugiro que atualize-se já!

Com o NuGet, podemos baixar pacotes tanto via console, com o “Package Manager Console”, como via dialog, com a opção de menu “Manage NuGet Packages…”. Neste exemplo, vamos usar a 2ª opção.

Clique com o botão direito sobre o projeto e vá em “Manage NuGet Packages…”. Pesquise por ELMAH e você obterá vários resultados. Basicamente, você terá a “Core Library”, que é o ELMAH propriamente dito, e o resto, que são pré-configurações para colocá-lo rapidamente em funcionamento.

Como vamos logar os erros em XML, escolha a opção “ELMAH on XML Log” e mande instalar (a “Core Library” também será instalada, já que é uma dependência).


Graças ao NuGet, todas as configurações do ELMAH no web.config serão criadas automaticamente (para simplificar estou mostrando abaixo somente os trechos do ELMAH):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
    <sectionGroup name="elmah">
    <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
    <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
    <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
    <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
    </sectionGroup>
</configSections>

<system.web>
  <httpModules>
    <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
    <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
  </httpModules>
  <httpHandlers>
    <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
  </httpHandlers>
</system.web>

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
    <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
  </modules>
  <handlers>
    <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah"
         preCondition="integratedMode" />
  </handlers>
</system.webServer>

<elmah>
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data/Elmah.Errors" />
</elmah>
</configuration>

Verificando seu funcionamento

Para vermos o Elmah em ação, vamos disparar uma exceção no HomeController:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        throw new Exception("testando log com o ELMAH");
    }
}

Rode a aplicação e você verá a tela amarela da morte. Depois disso, acesse o endereço (localhost)/elmah.axd e você verá a página de erros do ELMAH:

Clicando em “Details…” na coluna “Error”, você pode visualizar todas as informações da tela amarela da morte.

Conclusão

O ELMAH é uma biblioteca para tratamento de erros muito fácil de instalar e configurar. Se você precisa colocar algum tratamento de erros em sua aplicação de forma prática e rápida (pelo amor de Deus, não perca seu tempo inventando um framework pra isso!), o ELMAH atende muito bem.

Como dito no início, ele dá suporte aos principais bancos de dados existentes. Estou utilizando o ELMAH também com o SQL Compact. Sua configuração é basicamente da mesma forma mostrada no artigo: ao invés de instalar o pacote “ELMAH on XML Log”, instale o pacote “ELMAH on MS SQL Server Compact”, que o NuGet cuidará de baixar o SQL Compact e configurar as entradas necessárias no web.config.

Na parte 2 deste artigo, mostrarei como utilizar o ELMAH em conjunto com o atributo HandleError. Aguarde (não vai demorar).

“Inté”!
__________________________

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)

 

Anúncios

Participe! Vamos trocar uma ideia sobre desenvolvimento de software!

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s