Pegando erro na aplicação web


por Mauricio Junior em 1/1/2011 0

    Olá pessoal, hoje gostaria de mostrar na prática como pegar erro na sua aplicação web, site ou até mesmo na sua intranet. Qualquer erro que houver no site ou que acontecer no momento de execução será enviado um email a você.

Usado:
Ferramenta: Visual Studio 2010
Linguagem: C#.NET
Plataforma: ASP.NET / Web

Pequena explicação

    Existem várias maneiras de pegar erro na aplicação. Muitos utilizam try{} catch{} dentro de métodos e muitos desenvolvedores nem se atentam em relação a isso. É importante usar try{} catch{}, transação no banco de dados e tratamento de erro.
    O primeiro passo para pegar o erro é utilizar sempre o que tem de padrão, documentação da linguagem e ferramenta utilizada. Depois basta seguir o que foi implementado sem mudar no meio do caminho.

    Você pode: escrever no servidor o erro, como por exemplo no eventview; escrever em arquivo local da aplicação, mandar e-mail e tudo mais.

    Em uma plataforma web, talvez você não tenha permissão de acessar localmente a pasta do servidor ou escrever em um determinado diretório, o erro ocorrido inesperadamente. Quando isso ocorre, procuro sempre me atentar para que o software me envie informações sobre o que aconteceu ou o que o usuário fez para dar problema em determinada parte do código.

    Para isso, existe o arquivo Global.asax que pode me ajudar e te ajudar enviando o erro ocorrido por e-mail. É simples e fácil o código, veja o Code 1. Dentro do arquivo Global, existe um método chamado Application_Error responsável por pegar todos os erros e é nele que vou me basear.

 

void Application_Error(object sender, EventArgs e)

        {

            Exception exception = HttpContext.Current.Error;

            HttpException httpException = (exception as HttpException);

 

            if ((httpException != null) && (httpErrorCodesIgnored.Contains(httpException.ErrorCode)))

            {

                Exception ex = Server.GetLastError().GetBaseException();

                string strSubject = "SodexHo-Web Error: " + ex.Message;

                string strBody = String.Empty;

                strBody += "<p>URL: " + HttpContext.Current.Request.Url.ToString();

                strBody += "<p><font color=red>" + ex.ToString().Replace("\n", "<br>").Replace("   at ", "&nbsp;&nbsp;&nbsp;at ") + "</font>";

                strBody += "<p>User IP: " + HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] + " &nbsp; " + HttpContext.Current.Request.ServerVariables["REMOTE_HOST"];

                strBody += "<p>Date/Time: " + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToShortTimeString();

                strBody += "<p>User Agent: " + HttpContext.Current.Request.UserAgent;

                if (HttpContext.Current.Request.UrlReferrer != null)

                    strBody += "<p>Referrer: " + HttpContext.Current.Request.UrlReferrer.ToString();

 

                SccSodexHo.Web.Code.Util.MailSend("SodexHo-Web Error", ex.Message + "<br>"+ strBody.ToString());

            }

        }

 


Code 1.
    Note que o primeiro passo foi escrever o código dentro do método específico de erro no Global. (Code 2)

 

void Application_Error(object sender, EventArgs e)

 

Code 2.

    Depois foi pego o contexto do erro corrente. Tudo virá nele sem qualquer problema e não importa o mais simples que for, por exemplo: se você colocou uma imagem e ela não existe, ou o arquivo não existe, ou o css; tudo isso será detectado. Code 3.

 

Exception exception = HttpContext.Current.Error;

 

Code 3.

    Depois disso, foi feito um cast do exception para HttpException e verificado se o mesmo é diferente de null. (Code 4)

 

HttpException httpException = (exception as HttpException);

            if ((httpException != null) && (httpErrorCodesIgnored.Contains(httpException.ErrorCode)))

 

Code 4
    Depois da verificação, os dados são pegos para envio de e-mail. Code 5.

 

Exception ex = Server.GetLastError().GetBaseException();

                string strSubject = "Nome_do_aplicativo " + ex.Message;

                string strBody = String.Empty;

                strBody += "<p>URL: " + HttpContext.Current.Request.Url.ToString();

                strBody += "<p><font color=red>" + ex.ToString().Replace("\n", "<br>").Replace("   at ", "&nbsp;&nbsp;&nbsp;at ") + "</font>";

                strBody += "<p>User IP: " + HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] + " &nbsp; " + HttpContext.Current.Request.ServerVariables["REMOTE_HOST"];

                strBody += "<p>Date/Time: " + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToShortTimeString();

                strBody += "<p>User Agent: " + HttpContext.Current.Request.UserAgent;

                if (HttpContext.Current.Request.UrlReferrer != null)

                    strBody += "<p>Referrer: " + HttpContext.Current.Request.UrlReferrer.ToString();

 

Code 5.

    No momento da montagem do e-mail, foi pego o último erro baseado em exceção. Depois foi pego o título, url, o erro, o ip do usuário, a data, o usuário logado e a página de erro. Tudo isso mostrado no Code 5.

    Lembro que, qualquer erro que der no aplicativo, como informado anteriormente vai ser pego dentro da aplicação, pois tudo será rastreado. Depois de todo o código, é necessário enviar o que foi pego por e-mail. Para isso é bom fazer um método dentro do código que envie e-mail. Code 6.

 

NAME_SPACE.Util.MailSend("APLICATIVO", ex.Message + "<br>"+ strBody.ToString());

 

Code 6

    Na última linha foi colocado o método gerado dentro na pasta UTIL, o método público
chamado MailSend passa os parâmetros pegos anteriormente. Para visualizar melhor segue todo o código no Code 7.

 

void Application_Error(object sender, EventArgs e)

        {

            Exception exception = HttpContext.Current.Error;

            HttpException httpException = (exception as HttpException);

 

            if ((httpException != null) && (httpErrorCodesIgnored.Contains(httpException.ErrorCode)))

            {

                Exception ex = Server.GetLastError().GetBaseException();

                string strSubject = "NOME_DO_APLICATIVO" + ex.Message;

                string strBody = String.Empty;

                strBody += "<p>URL: " + HttpContext.Current.Request.Url.ToString();

                strBody += "<p><font color=red>" + ex.ToString().Replace("\n", "<br>").Replace("   at ", "&nbsp;&nbsp;&nbsp;at ") + "</font>";

                strBody += "<p>User IP: " + HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] + " &nbsp; " + HttpContext.Current.Request.ServerVariables["REMOTE_HOST"];

                strBody += "<p>Date/Time: " + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToShortTimeString();

                strBody += "<p>User Agent: " + HttpContext.Current.Request.UserAgent;

                if (HttpContext.Current.Request.UrlReferrer != null)

                    strBody += "<p>Referrer: " + HttpContext.Current.Request.UrlReferrer.ToString();

 

            //Envia email

                NAME_SPACE.Util.MailSend("NOME_DO_APLICATIVO", ex.Message + "<br>"+ strBody.ToString());

            }

        }

 

Code 7.

    Bom, espero que tenha gostado e qualquer dúvida pode entrar em contato pelo site.

voltar   comente  subir

 
Mauricio Junior Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, ECODE10.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog: blog.mauriciojunior.org, Site pessoal www.mauriciojunior.org



Comentários:

Comente (dê sua opinião):
Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

Trabalhando com Session
Desenvolvendo software com qualidade
Servidor Integrado - Visual Studio.NET
E-mail Carta de Amor - Vírus
CSS no VS 2003
Usando public interface
Internet começa a ter ultra velocidade no Brasil
Trabalhando com o componente TabContainer
Adicionando Ícones no Windows Forms
Trabalhando com GridView e RowCommand
Channel9 - Soap, OData, Json
Abrindo Janela de Forma Modal
Inserindo Usuário no Banco de Dados MYSQL Usando Tecnologia AJAX
CES em Las Vegas
GridView Parte III
Sistema de Login em ASP – Parte VII (Utilizando três camadas)
Vídeo: Série Atlas.NET - Parte III
WebService utilizando soapHeader e token
Sistema ASP 3.0 utilizando 3 camadas – Parte 1
Artigo criando atalhos para a sua aplicação.
Você tem boa postura no trabalho?
Vídeo Aula: Criando e Publicando Site de uma melhor maneira com C#.NET
Vídeo: Windows Phone com Windows Mobile 7
Criando arquivo usando Visual Studio.NET 2005
Windows Phone no Brasil
Enviando E-mail com Anexo
Controle de peso mobile
Page.Header
Documento padrão de desenvolvimento
Teclas de Atalho do Visual Studio .NET 2010
Limpando Cache do Brownser
Promoções de livros móveis .NET
Visual Studio 11 – Novas funcionalidades e melhorias parte 2
Web abrindo aplicações locais
Montando Menu Dinâmico com Banco de Dados