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.