Compartilhar via


Registro em log de detalhes de erros com o ELMAH (C#)

por Scott Mitchell

O ELMAH (Módulos e Manipuladores de Log de Erros) oferece outra abordagem para registrar erros de runtime em um ambiente de produção. O ELMAH é uma biblioteca de log de erros gratuita código aberto que inclui recursos como filtragem de erros e a capacidade de exibir o log de erros de uma página da Web, como um RSS feed ou baixá-lo como um arquivo delimitado por vírgulas. Este tutorial explica como baixar e configurar o ELMAH.

Introdução

O tutorial anterior examinou o ASP. O sistema de monitoramento de integridade do NET, que oferece uma biblioteca pronta para gravar uma ampla variedade de eventos da Web. Muitos desenvolvedores usam o monitoramento de integridade para registrar e enviar por email os detalhes de exceções sem tratamento. No entanto, há alguns pontos de dor com esse sistema. Em primeiro lugar, a falta de qualquer tipo de interface do usuário para exibir informações sobre os eventos registrados. Se você quiser ver um resumo dos 10 últimos erros ou exibir os detalhes de um erro ocorrido na semana passada, deverá percorrer o banco de dados, examinar sua Caixa de Entrada de email ou criar uma página da Web que exiba informações da aspnet_WebEvent_Events tabela.

Outro ponto de dor gira em torno da complexidade do monitoramento de saúde. Como o monitoramento de integridade pode ser usado para registrar uma infinidade de eventos diferentes e porque há uma variedade de opções para instruir como e quando os eventos são registrados, configurar corretamente o sistema de monitoramento de integridade pode ser uma tarefa onerosa. Por fim, há problemas de compatibilidade. Como o monitoramento de integridade foi adicionado pela primeira vez ao .NET Framework na versão 2.0, ele não está disponível para aplicativos Web mais antigos criados usando ASP.NET versão 1.x. Além disso, a SqlWebEventProvider classe , que usamos no tutorial anterior para registrar os detalhes do erro em um banco de dados, funciona apenas com bancos de dados do Microsoft SQL Server. Você precisará criar uma classe de provedor de log personalizada caso precise registrar erros em um armazenamento de dados alternativo, como um arquivo XML ou um banco de dados Oracle.

Uma alternativa ao sistema de monitoramento de integridade é o ELMAH (Error Logging Modules And Handlers), um sistema de registro em log de erros gratuito e de software livre criado por Atif Aziz. A diferença mais notável entre os dois sistemas é a capacidade do ELAMH de exibir uma lista de erros e os detalhes de um erro específico de uma página da Web e como um RSS feed. O ELMAH é mais fácil de configurar do que o monitoramento de integridade porque registra apenas erros. Além disso, o ELMAH inclui suporte para aplicativos ASP.NET 1.x, ASP.NET 2.0 e ASP.NET 3.5 e é fornecido com uma variedade de provedores de origem de log.

Este tutorial explica as etapas envolvidas na adição de ELMAH a um aplicativo ASP.NET. Vamos começar!

Observação

O sistema de monitoramento de integridade e o ELMAH têm seus próprios conjuntos de prós e contras. Eu encorajo você a experimentar os dois sistemas e decidir o que melhor atende às suas necessidades.

Adicionando o ELMAH a um aplicativo Web ASP.NET

A integração do ELMAH a um aplicativo de ASP.NET novo ou existente é um processo fácil e simples que leva menos de cinco minutos. Em poucas palavras, ele envolve quatro etapas simples:

  1. Baixe o ELMAH e adicione o Elmah.dll assembly ao seu aplicativo Web,
  2. Registrar os módulos HTTP e o manipulador do ELMAH no Web.config,
  3. Especifique as opções de configuração do ELMAH e
  4. Crie a infraestrutura de origem do log de erros, se necessário.

Vamos percorrer cada uma dessas quatro etapas, uma de cada vez.

Etapa 1: baixar os arquivos de projeto ELMAH e adicionarElmah.dllao seu aplicativo Web

O ELMAH 1.0 BETA 3 (Build 10617), a versão mais recente no momento da gravação, está incluído no download disponível neste tutorial. Como alternativa, você pode visitar o site do ELMAH para obter a versão mais recente ou baixar o código-fonte. Extraia o download do ELMAH para uma pasta na área de trabalho e localize o arquivo de assembly ELMAH (Elmah.dll).

Observação

O Elmah.dll arquivo está localizado na pasta do Bin download, que tem subpastas para diferentes versões .NET Framework e para builds de versão e depuração. Use o Build de versão para a versão de estrutura apropriada. Por exemplo, se você estiver criando um aplicativo Web ASP.NET 3.5, copie o Elmah.dll arquivo da Bin\net-3.5\Release pasta.

Em seguida, abra o Visual Studio e adicione o assembly ao projeto clicando com o botão direito do mouse no nome do site no Gerenciador de Soluções e escolhendo Adicionar Referência no menu de contexto. Isso abre a caixa de diálogo Adicionar Referência. Navegue até a guia Procurar e escolha o Elmah.dll arquivo. Essa ação adiciona o Elmah.dll arquivo à pasta do Bin aplicativo Web.

Observação

O tipo WAP (Projeto de Aplicativo Web) não mostra a Bin pasta no Gerenciador de Soluções. Em vez disso, ele lista esses itens na pasta Referências.

O Elmah.dll assembly inclui as classes usadas pelo sistema ELMAH. Essas classes se enquadram em uma das três categorias:

  • Módulos HTTP – um Módulo HTTP é uma classe que define manipuladores de eventos, HttpApplication como o Error evento. O ELMAH inclui vários módulos HTTP, sendo os três mais alemães:

    • ErrorLogModule – registra exceções sem tratamento em uma fonte de log.
    • ErrorMailModule – envia os detalhes de uma exceção sem tratamento em uma mensagem de email.
    • ErrorFilterModule – aplica filtros especificados pelo desenvolvedor para determinar quais exceções são registradas e quais são ignoradas.
  • Manipuladores HTTP – um manipulador HTTP é uma classe responsável por gerar a marcação para um tipo específico de solicitação. O ELMAH inclui manipuladores HTTP que renderizam detalhes de erro como uma página da Web, como um RSS feed ou como um arquivo delimitado por vírgulas (CSV).

  • Fontes de log de erros – fora da caixa, o ELMAH pode registrar erros na memória, em um banco de dados do Microsoft SQL Server, em um banco de dados do Microsoft Access, em um banco de dados Oracle, em um arquivo XML, em um banco de dados SQLite ou em um banco de dados do Vista DB. Assim como o sistema de monitoramento de integridade, a arquitetura do ELMAH foi criada usando o modelo de provedor, o que significa que você pode criar e integrar perfeitamente seus próprios provedores de origem de log personalizados, se necessário.

Etapa 2: Registrar o módulo e o manipulador HTTP do ELMAH

Embora o Elmah.dll arquivo contenha os Módulos HTTP e o Manipulador necessários para registrar automaticamente exceções sem tratamento e exibir detalhes de erro de uma página da Web, eles devem ser explicitamente registrados na configuração do aplicativo Web. O ErrorLogModule Módulo HTTP, uma vez registrado, assina o HttpApplicationevento do Error . Sempre que esse evento é gerado, os ErrorLogModule logs registram os detalhes da exceção em uma fonte de log especificada. Veremos como definir o provedor de origem de log na próxima seção, "Configurando o ELMAH". A ErrorLogPageFactory fábrica do Manipulador HTTP é responsável por gerar a marcação ao exibir o log de erros de uma página da Web.

A sintaxe específica para registrar módulos e manipuladores HTTP depende do servidor Web que está alimentando o site. Para o ASP.NET Development Server e o IIS da Microsoft versão 6.0 e anteriores, módulos HTTP e manipuladores são registrados nas <httpModules> seções e <httpHandlers> , que aparecem dentro do <system.web> elemento . Se você estiver usando o IIS 7.0, eles precisarão ser registrados nas <system.webServer> seções e <handlers> do <modules> elemento. Felizmente, você pode definir os módulos e manipuladores HTTP em ambos os locais, independentemente do servidor Web sendo usado. Essa opção é a mais portátil, pois permite que a mesma configuração seja usada nos ambientes de desenvolvimento e produção, independentemente do servidor Web que está sendo usado.

Comece registrando o ErrorLogModule Módulo HTTP e o ErrorLogPageFactory Manipulador HTTP na <httpModules> seção e <httpHandlers> em <system.web>. Se sua configuração já definir esses dois elementos, basta incluir o elemento para o <add> Módulo HTTP e o Manipulador do ELMAH.

<?xml version="1.0"?>
<configuration>
  ...
  
  <system.web>
  ...

  <httpHandlers>
  ...

  <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
  </httpHandlers>
  
  <httpModules>
  ...
  
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
  </httpModules>

  ...
  </system.web>

  ...
</configuration>

Em seguida, registre o Módulo HTTP e o Manipulador do ELMAH no <system.webServer> elemento . Como antes, se esse elemento ainda não estiver presente em sua configuração, adicione-o.

<?xml version="1.0"?>
<configuration>
  ...

  <system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules>
  ...

  <add name="Elmah.ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
  </modules>
  <handlers>
  ...

  <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
  </handlers>
  </system.webServer>
</configuration>

Por padrão, o IIS 7 reclama se módulos HTTP e manipuladores estão registrados na <system.web> seção. O validateIntegratedModeConfiguration atributo no elemento instrui o <validation> IIS 7 a suprimir essas mensagens de erro.

Observe que a sintaxe para registrar o ErrorLogPageFactory Manipulador HTTP inclui um path atributo , que é definido como elmah.axd. Esse atributo informa ao aplicativo Web que, se uma solicitação chegar para uma página chamada elmah.axd , a solicitação deverá ser processada pelo ErrorLogPageFactory Manipulador HTTP. Veremos o ErrorLogPageFactory Manipulador HTTP em ação mais adiante neste tutorial.

Etapa 3: Configurando o ELMAH

O ELMAH procura suas opções de configuração no arquivo do Web.config site em uma seção de configuração personalizada chamada <elmah>. Para usar uma seção personalizada, Web.config ela deve primeiro ser definida no <configSections> elemento . Abra o Web.config arquivo e adicione a seguinte marcação ao <configSections>:

<?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>

  ...
</configuration>

Observação

Se você estiver configurando o ELMAH para um aplicativo ASP.NET 1.x, remova o requirePermission="false" atributo dos <section> elementos acima.

A sintaxe acima registra a seção personalizada <elmah> e suas subseções: <security>, <errorLog>, <errorMail>e <errorFilter>.

Em seguida, adicione a <elmah> seção a Web.config. Esta seção deve aparecer no mesmo nível que o <system.web> elemento . Dentro da <elmah> seção, adicione as <security> seções e <errorLog> da seguinte maneira:

<?xml version="1.0"?>
<configuration>
  ...

  <elmah>
  <security allowRemoteAccess="0" />
  
  <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ReviewsConnectionString" />
  </elmah>

  ...
</configuration>

O <security> atributo da allowRemoteAccess seção indica se o acesso remoto é permitido. Se esse valor for definido como 0, a página da Web do log de erros só poderá ser exibida localmente. Se esse atributo estiver definido como 1, a página da Web do log de erros será habilitada para visitantes remotos e locais. Por enquanto, vamos desabilitar a página da Web do log de erros para visitantes remotos. Permitiremos o acesso remoto mais tarde depois de termos a oportunidade de discutir as preocupações de segurança de fazê-lo.

A <errorLog> seção define a origem do log de erros, que determina onde os detalhes do erro são registrados; é semelhante à <providers> seção no sistema de monitoramento de integridade. A sintaxe acima especifica a SqlErrorLog classe como a origem do log de erros, que registra os erros em um banco de dados do Microsoft SQL Server especificado pelo valor do connectionStringName atributo.

Observação

O ELMAH é fornecido com provedores de log de erros adicionais que podem ser usados para registrar erros em um arquivo XML, um banco de dados do Microsoft Access, um banco de dados Oracle e outros armazenamentos de dados. Consulte o arquivo de exemplo Web.config incluído no download do ELMAH para obter informações sobre como usar esses provedores de log de erros alternativos.

Etapa 4: Criando a infraestrutura de origem do log de erros

O provedor do ELMAH registra os detalhes do SqlErrorLog erro em um banco de dados do Microsoft SQL Server especificado. O SqlErrorLog provedor espera que esse banco de dados tenha uma tabela chamada ELMAH_Error e três procedimentos armazenados: ELMAH_GetErrorsXml, ELMAH_GetErrorXmle ELMAH_LogError. O download do ELMAH inclui um arquivo chamado SQLServer.sql na db pasta que contém o T-SQL para criar essa tabela e esses procedimentos armazenados. Você precisará executar essas instruções em seu banco de dados para usar o SqlErrorLog provedor.

Os números 1 e 2 mostram o banco de dados Explorer no Visual Studio depois que os objetos de banco de dados necessários para o SqlErrorLog provedor tiverem sido adicionados.

Captura de tela que mostra os erros de log de erros do provedor de Log de Erros de QL gravados na tabela.

Figura 1: o SqlErrorLog provedor registra erros na ELMAH_Error tabela

Captura de tela que mostra como o provedor de Log de Erros de SPL usa três procedimentos armazenados.

Figura 2: o SqlErrorLog provedor usa três procedimentos armazenados

ELMAH em ação

Neste ponto, adicionamos eLMAH ao aplicativo Web, registramos o ErrorLogModule Módulo HTTP e o ErrorLogPageFactory Manipulador HTTP, especificamos as opções de configuração do ELMAH no Web.confige adicionamos os objetos de banco de dados necessários para o SqlErrorLog provedor de log de erros. Agora estamos prontos para ver o ELMAH em ação! Visite o site revisões de livros e visite uma página que gera um erro de runtime, como Genre.aspx?ID=foo, ou uma página inexistente, como NoSuchPage.aspx. O que você vê ao visitar essas páginas depende da <customErrors> configuração e se você está visitando local ou remotamente. (Consulte o tutorial Exibindo uma página de erro personalizada para obter um atualizador sobre este tópico.)

O ELMAH não afeta o conteúdo mostrado ao usuário quando ocorre uma exceção sem tratamento; ele apenas registra seus detalhes. Esse log de erros pode ser acessado na página elmah.axd da Web da raiz do seu site, como http://localhost/BookReviews/elmah.axd. (Esse arquivo não existe fisicamente em seu projeto, mas quando uma solicitação é enviada para elmah.axd o runtime, ele é enviado para o manipulador HTTP, o ErrorLogPageFactory que gera a marcação enviada de volta para o navegador.)

Observação

Você também pode usar a página para instruir o elmah.axd ELMAH a gerar um erro de teste. Visitar elmah.axd/test (como em ) http://localhost/BookReviews/elmah.axd/testfaz com que o ELMAH gere uma exceção do tipo Elmah.TestException, que tem a mensagem de erro: " Esta é uma exceção de teste que pode ser ignorada com segurança."

A Figura 3 mostra o log de erros ao visitar elmah.axd o ambiente de desenvolvimento.

Captura de tela que mostra como o log de erros é exibido de uma página da Web.

Figura 3: Elmah.axd exibe o log de erros de uma página da Web
(Clique para exibir a imagem em tamanho real)

O log de erros na Figura 3 contém seis entradas de erro. Cada entrada inclui o código de status HTTP (404 ou 500, para esses erros), o tipo, a descrição, o nome do usuário conectado quando o erro ocorreu e a data e hora. Clicar no link Detalhes exibe uma página que inclui a mesma mensagem de erro mostrada na Tela Amarela de Morte dos Detalhes do Erro (consulte a Figura 4) juntamente com os valores das variáveis de servidor no momento do erro (consulte a Figura 5). Você também pode exibir o XML bruto no qual os detalhes do erro são salvos, o que inclui informações adicionais, como os valores no cabeçalho HTTP POST.

Captura de tela que exibe os detalhes do erro YSOD.

Figura 4: Exibir os detalhes do erro YSOD
(Clique para exibir a imagem em tamanho real)

Captura de tela que mostra os valores da coleção de variáveis de servidor.

Figura 5: Explorar os valores da coleção Server Variables no momento do erro
(Clique para exibir a imagem em tamanho real)

A implantação do ELMAH no site de produção envolve:

  • Copiando o Elmah.dll arquivo para a Bin pasta em produção,
  • Copiando as definições de configuração específicas do ELMAH para o Web.config arquivo usado na produção e
  • Adicionando a infraestrutura de origem do log de erros ao banco de dados de produção.

Exploramos técnicas para copiar arquivos do desenvolvimento para a produção em tutoriais anteriores. Talvez a maneira mais fácil de obter a infraestrutura de origem do log de erros no banco de dados de produção seja usar SQL Server Management Studio para se conectar ao banco de dados de produção e, em seguida, executar o SqlServer.sql arquivo de script, o que criará a tabela e os procedimentos armazenados necessários.

Exibindo a página Detalhes do Erro em Produção

Depois de implantar seu site em produção, visite o site de produção e gere uma exceção sem tratamento. Como no ambiente de desenvolvimento, o ELMAH não tem nenhum efeito na página de erro exibida quando ocorre uma exceção sem tratamento; Em vez disso, ele apenas registra o erro. Se você tentar visitar a página de log de erros (elmah.axd) do ambiente de produção, será recebido com a página Proibido mostrada na Figura 6.

Captura de tela que mostra que os visitantes remotos não podem exibir a página da Web do log de erros.

Figura 6: por padrão, visitantes remotos não podem exibir a página da Web do log de erros
(Clique para exibir a imagem em tamanho real)

Lembre-se de que, na seção da configuração do <security> ELMAH, definimos o allowRemoteAccess atributo como 0, o que proíbe que usuários remotos visualizem o log de erros. É importante proibir que visitantes anônimos visualizem o log de erros, pois os detalhes do erro podem revelar vulnerabilidades de segurança ou outras informações confidenciais. Se você decidir definir esse atributo como 1 e habilitar o acesso remoto ao log de erros, será importante bloquear o elmah.axd caminho para que somente visitantes autorizados possam acessá-lo. Isso pode ser feito adicionando um <location> elemento ao Web.config arquivo .

A configuração a seguir permite que apenas os usuários na função Administração acessem a página da Web do log de erros:

<?xml version="1.0"?>
<configuration>
  ...

  <elmah>
  <security allowRemoteAccess="1" />
  
  ...
  </elmah>

  ...

  <location path="elmah.axd">
  <system.web>
  <authorization>
  <allow roles="Admin" />
  <deny users="*" />
  </authorization>
  </system.web>  
  </location>
</configuration>

Observação

A função Administração e os três usuários no sistema - Scott, Jisun e Alice - foram adicionados no tutorial Configurando um site que usa serviços de aplicativos. Os usuários Scott e Jisun são membros da função Administração. Para obter mais informações sobre autenticação e autorização, consulte meus Tutoriais de Segurança do Site.

O log de erros no ambiente de produção agora pode ser exibido por usuários remotos; consulte os Números 3, 4 e 5 para capturas de tela da página da Web do log de erros. No entanto, se um usuário anônimo ou não Administração tentar exibir a página de log de erros, ele será redirecionado automaticamente para a página de logon (Login.aspx), como mostra a Figura 7.

Captura de tela que mostra como usuários não autorizados são redirecionados automaticamente para a página de logon.

Figura 7: Usuários não autorizados são redirecionados automaticamente para a página de logon
(Clique para exibir a imagem em tamanho real)

Erros de registro em log programaticamente

O Módulo HTTP do ErrorLogModule ELMAH registra automaticamente exceções sem tratamento na fonte de log especificada. Como alternativa, você pode registrar um erro sem precisar gerar uma exceção sem tratamento usando a ErrorSignal classe e seu Raise método. O Raise método é passado por um Exception objeto e registra-o como se essa exceção tivesse sido gerada e tivesse atingido o runtime ASP.NET sem ser tratada. A diferença, no entanto, é que a solicitação continua em execução normalmente depois que o Raise método é chamado, enquanto uma exceção gerada sem tratamento interrompe a execução normal da solicitação e faz com que o runtime ASP.NET exiba a página de erro configurada.

A ErrorSignal classe é útil em situações em que há alguma ação que pode falhar, mas sua falha não é catastrófica para a operação geral que está sendo executada. Por exemplo, um site pode conter um formulário que usa a entrada do usuário, armazena-o em um banco de dados e envia ao usuário um email informando que as informações foram processadas. O que deve acontecer se as informações forem salvas no banco de dados com êxito, mas há um erro ao enviar a mensagem de email? Uma opção seria lançar uma exceção e enviar o usuário para a página de erro. No entanto, isso pode confundir o usuário a pensar que as informações inseridas não foram salvas. Outra abordagem seria registrar o erro relacionado ao email, mas não alterar a experiência do usuário de forma alguma. É aqui que a ErrorSignal classe é útil.

// ... Save user's information to the database ...
...

// Attempt to send the user a confirmation email
try
{
    // ... Send an email ...
}
catch (Exception e)
{
    // Error in sending email. Log it!
    ErrorSignal.FromCurrentContext().Raise(e);
}

Notificação de erro por meio de Email

Juntamente com erros de log em um banco de dados, o ELMAH também pode ser configurado para enviar detalhes de erro por email para um destinatário especificado. Essa funcionalidade é fornecida pelo ErrorMailModule Módulo HTTP; portanto, você deve registrar este Módulo Web.config HTTP para enviar detalhes do erro por email.

<?xml version="1.0"?>
<configuration>
  ...
  
  <system.web>
  ...

  <httpModules>
  ...
  
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
  <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah"/>
  </httpModules>
  </system.web>

  <system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules>
  ...

  <add name="Elmah.ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
  <add name="Elmah.ErrorMail" type="Elmah.ErrorMailModule" preCondition="managedHandler" />
  </modules>
  
  ...
  </system.webServer>
</configuration>

Em seguida, especifique informações sobre o email de erro na <elmah> seção do <errorMail> elemento, indicando o remetente e o destinatário do email, o assunto e se o email é enviado de forma assíncrona.

<?xml version="1.0"?>
<configuration>
  ...

  <elmah>
  ...

  <errorMail from="support@example.com"
  to="support@example.com"
  subject="Book Reviews Runtime Error"
  async="true" />
  </elmah>

  ...
</configuration>

Com as configurações acima em vigor, sempre que ocorre um erro de runtime, o ELMAH envia um email para support@example.com com os detalhes do erro. O email de erro do ELMAH inclui as mesmas informações mostradas na página da Web de detalhes do erro, ou seja, a mensagem de erro, o rastreamento de pilha e as variáveis do servidor (consulte os Números 4 e 5). O email de erro também inclui o conteúdo da Tela Amarela de Morte dos Detalhes da Exceção como um anexo (YSOD.html).

A Figura 8 mostra o email de erro do ELMAH gerado visitando Genre.aspx?ID=foo. Embora a Figura 8 mostre apenas a mensagem de erro e o rastreamento de pilha, as variáveis de servidor são incluídas mais abaixo no corpo do email.

Captura de tela que mostra que você pode configurar o ELMAH para enviar detalhes do erro por email.

Figura 8: Você pode configurar o ELMAH para enviar detalhes do erro por meio de Email
(Clique para exibir a imagem em tamanho real)

Somente erros de log de interesse

Por padrão, o ELMAH registra os detalhes de cada exceção sem tratamento, incluindo 404 e outros erros HTTP. Você pode instruir o ELMAH a ignorar esses ou outros tipos de erros usando a filtragem de erros. A lógica de filtragem é executada pelo Módulo HTTP do ErrorFilterModule ELMAH, no Web.config qual você precisará se registrar para usar a lógica de filtragem. As regras para filtragem são especificadas na <errorFilter> seção .

A marcação a seguir instrui o ELMAH a não registrar erros 404.

<?xml version="1.0"?>
<configuration>
  ...

  <elmah>
  ...

  <errorFilter>
  <test>
  <equal binding="HttpStatusCode" value="404" type="Int32" />
  </test>
  </errorFilter>
  </elmah>

  ...
</configuration>

Observação

Não se esqueça de que, para usar a filtragem de erros, você deve registrar o ErrorFilterModule Módulo HTTP.

O <equal> elemento dentro da <test> seção é conhecido como uma asserção. Se a asserção for avaliada como true, o erro será filtrado do log do ELMAH. Há outras declarações disponíveis, incluindo: <greater>, , <not-equal><greater-or-equal>, <lesser>, <lesser-or-equal>e assim por diante. Você também pode combinar as declarações usando os <and> operadores boolianos e <or> . Além disso, você pode até incluir uma expressão JavaScript simples como uma asserção ou escrever suas próprias declarações em C# ou Visual Basic.

Para obter mais informações sobre os recursos de filtragem de erros do ELMAH, consulte a seção Filtragem de Erros nos Artigos ELMAH.

Resumo

O ELMAH fornece um mecanismo simples, mas poderoso para registrar erros em um aplicativo Web ASP.NET. Assim como o sistema de monitoramento de integridade da Microsoft, o ELMAH pode registrar erros em um banco de dados e pode enviar os detalhes do erro para um desenvolvedor por email. Ao contrário do sistema de monitoramento de integridade, o ELMAH inclui suporte pronto para uma ampla gama de armazenamentos de dados de log de erros, incluindo: Microsoft SQL Server, Microsoft Access, Oracle, arquivos XML e vários outros. Além disso, o ELMAH oferece um mecanismo interno para exibir o log de erros e detalhes sobre um erro específico de uma página da Web, elmah.axd. A elmah.axd página também pode renderizar informações de erro como um RSS feed ou como um CSV (arquivo de valor separado por vírgulas), que você pode ler usando o Microsoft Excel. Você também pode instruir o ELMAH a filtrar erros do log usando asserções declarativas ou programáticas. E o ELMAH pode ser usado com aplicativos ASP.NET versão 1.x.

Cada aplicativo implantado deve ter algum mecanismo para registrar automaticamente exceções sem tratamento e enviar notificação para a equipe de desenvolvimento. Se isso é feito usando o monitoramento de integridade ou o ELMAH é secundário. Em outras palavras, não importa muito se você usa o monitoramento de integridade ou o ELMAH; avalie os dois sistemas e escolha aquele que melhor atenda às suas necessidades. O que é fundamentalmente importante é que algum mecanismo seja colocado em prática para registrar exceções sem tratamento no ambiente de produção.

Programação feliz!

Leitura Adicional

Para obter mais informações sobre os tópicos discutidos neste tutorial, consulte os seguintes recursos: