Monitorando todos os erros de uma aplicação em apenas uma rotina
Olá pessoal, hoje estou aqui com um assunto bem interessante, monitoramento de erros e exceções na nossa aplicação WEB. O intuito desse artigo é como desenvolver de maneira rápida uma rotina que pegue qualquer exceção encontrada em nossa aplicação (tratadas e não tratadas) e nos envie por e-mail.
Muitas vezes ao desenvolver uma aplicação complexa utilizamos as rotinas Try e Catch nos principais métodos da classe de negócios, da classe de dados e até mesmo do próprio Front-end (Camada de apresentação), mas por mais atentos que sejamos, quando se trata de uma aplicação um pouco mais complexa deixamos escapar alguma coisa.
Um dos costumes que tenho ao desenvolver uma nova aplicação é logo de inicio criar uma classe Padrão chamada cHeranca para que todas as outras classes do meu projeto herdem seus métodos, funções e propriedades, assim eu evito de ficar escrevendo o mesmo código mais de uma vez.
Nesse exemplo eu vou utilizar uma classe dentro do próprio web site para funcionar como herança para todas as páginas. Então vamos lá:
Primeiro crie um novo Web Site no Visual Studio 2005 utilizando a linguagem Vb.Net, depois disso clique com o botão direito sobre o Web Site no Solution Explorer e adicione uma nova classe chamada cHeranca.vb ao projeto.

Agora no nosso arquivo Default.aspx.vb vamos trocar a diretiva

Pronto, agora nossa página Default.aspx.vb está herdando todos os métodos da classe cHeranca. Como sabemos todas as página têm um evento chamado onError o que vamos fazer na verdade, é sobrescrever esse método na nossa classe cHeranca para que toda vez que ocorra um erro (exceção) em uma página ele passe para esse metodo que está dentro da nossa classe herança. Parece difícil ?.. Mas não é !
Escreva o seguinte código na sua página cHeranca

Pronto, agora qualquer erro que acontecer dentro de uma página ele te mandará para dentro dessa rotina. Reparem que conforme você digita o código do override, ele já te mostra uma porção de métodos da classe System.Web.UI.Page que podem ser sobrescritos e que no final ele coloca a seguinte linha MyBase.OnError(e). Essa linha serve para que depois de executar essa rotina, ele volta a executar o metodo onError só que agora da página atual, isso nos permite colocarmos um tratamento de erro global para a toda a aplicação e um específico para cada página.
Bom, metade do serviço a gente fez usando essa técnica de polimorfismo chamada overrides (Sobrescrever um método já criado). Agora nosso problema vai ser descobrir qual foi o erro que ocorreu, sendo que quando ele cai nessa método ele não recebe nenhum parâmetro do formato Exception. Pensando nisso também o Framework traz também uma função chamada GetLastError() dentro da classe Server, que retorna para a gente o ultimo erro que ocorreu na sua aplicação.

Viram como é simples agora basta desenvolver uma rotina que mande essa mensagem de erro por e-mail para nós. Informando A Hora/Data do erro, A página em que o erro ocorreu, e a mensagem de erro. Segue exemplo abaixo


Agora o único cuidado que você precisa ter é sempre que adicionar uma nova página aspx ao seu website, é mudar a herança dela, ao invés do System.Web.UI.Page (que vem definido como padrão) será o cHeranca.
Resumindo, toda vez que um usuário estiver utilizando a sua aplicação e ocorrer um erro ou exceção, esse mesmo será enviado para o seu endereço de e-mail e o usuário será redirecionado para uma página de erro amigável.
Por enquanto é só isso, até a próxima pessoal!
Quaisquer duvidas, problemas, comentários, ou afins williamsantos@miradesign.com.br