Olá pessoal,gostaria de mostrar como detectar erro de uma aplicação a todo custo.Importante detectar todo tipo de erro dentro de um sistema, é uma forma de prevenir qualquer problema do software para o seu cliente, não importa como foi construído.

 

Referência:

- Visual Studio.NET

- LinguagemC#.NET

- Tecnologia:ASP.NET

 

         Você deve estar me perguntando: - como fazer isso e pra que serve isso? Pois é, a minha resposta é bem grande e precisa de mais de um documento para explicar, porém vou tentar resumir a todo custo e exemplificar na prática e no desenvolvimento.

         A minha experiência de desenvolvimento de software, desde quando comecei a programar sozinho com 14 anos até hoje aos quase 28 anos de idade, e programando em grupo; vários problemas se passaram e várias novas soluções.

         Não sei se o ser humano de hoje está muito difícil ou se antigamente era mais fácil conversar e fazer a pessoa te escutar, só sei que trabalhar em grupo; principalmente se o grupo fizer algo que não tem documentação nenhuma, é muito difícil. Como sempre defendi o uso de documentação, acabei entrando em uma empresa hoje que não existe isso e tudo é pra ontem. Mesmo assim, brigo e peço sempre a documentação a todos.

         Imagina pegar um sistema pela metade sem documentação, código ruim, feio e para finalizar o pessoal que fez saiu da empresa, já passou por isso? Dessa forma, o melhor mesmo é criar métodos que possam pegar o erro, caso ocorra.

         Primeiro de tudo, use sempre try catche se possível finally.

 

 

Try{}Catch( Exception ex){}Finally{}

 

Code 1.1

 

         A segunda coisa é, procure sempre deixar uma camada para o erro no sistema, ou seja, caso ocorra o catch, melhor mesmo é identificar onde aconteceu o erro, mandare-mail, logar em um arquivo ou deixar registrado no eventview do sistema operacional. Existe caso que até loga no banco de dados o erro, mas em minha opinião, acredito que não seja a melhor alternativa.

         Lembra da empresa que te falei que não tem documentação nenhuma? Pois é, voltando ao assunto, para saber direito o queo sistema faz, é necessário fazer engenharia reversa do código, uma das piores coisas que existem na programação. (minha opinião).

        






Quando não existe solução, ou não tem tempo para verificar o código porque está dando erro em produção, o melhor mesmo é fazer uma solução genérica para pegar qualquer tipo de erro. Veja o Code 1.2.


 

 

protected void Application_Error(object sender, EventArgs e)

        {

            HttpContext ctx = HttpContext.Current;

 

            Exception exception = ctx.Server.GetLastError();

 

            StringBuilder str = new StringBuilder();

            str.Append("Error: "+exception.Message.ToString());

            str.Append("\r\n Details: "+ exception.InnerException.Message.ToString());

            str.Append("\r\n URL: " + Request.Url.AbsoluteUri.ToString());

            str.Append("\r\n Stack Trace: " + exception.InnerException.StackTrace.ToString());

            str.Append("\r\n Request Host: " + Request.UserHostAddress.ToString());

            str.Append("\r\n Host Name: " + Request.UserHostName.ToString());

            str.Append("\r\n User Agent: " + Request.UserAgent.ToString());

            str.Append("\r\n URL Referrer: " + Request.UrlReferrer.ToString());

            str.Append("\r\n UserName:  " + Request.LogonUserIdentity.Name.ToString());

            str.Append("\r\n Method: " + exception.TargetSite.ToString());

            str.Append("\r\n Source: " + exception.Source.ToString());

           

            // Compose Email

            MailMessage msg = new MailMessage();

 

            msg.From = new MailAddress("email automatico do sistema");

            msg.To.Add("seu-email");

            msg.Subject = "Error occurred in personal website application";

            msg.IsBodyHtml = true;

            msg.Body = str.ToString();

 

            SmtpClient smtp = new SmtpClient();

            smtp.Send(msg);

 

            String LogName = "Application";

            if (!EventLog.SourceExists(LogName))

            {

                EventLog.CreateEventSource(LogName, LogName);

            }

 

            // Insert into Event Log

            EventLog Log = new EventLog();

            Log.Source = LogName;

            Log.WriteEntry(str.ToString(), EventLogEntryType.Error);

 

            ctx.Server.ClearError();

 

        }

 

Code 1.2

 

         Mas lembre-se de uma coisa, qualquer tipo de erro o sistema vai pegar e mandar a você dependendo da forma que fizer.

         A primeira coisa que fiz foi pegar todos os erros da aplicação. (Code 1.3)

 

 

            HttpContext ctx = HttpContext.Current;

            Exception exception = ctx.Server.GetLastError();

 

Code 1.3

 

         O próximo passo foi dividir os erros para enviar ao administrador ou desenvolver, ou seja, você.(Code 1.4)

 

 

StringBuilder str = new StringBuilder();

            str.Append("Error: "+exception.Message.ToString());

            str.Append("\r\n Details: "+ exception.InnerException.Message.ToString());

            str.Append("\r\n URL: " + Request.Url.AbsoluteUri.ToString());

            str.Append("\r\n Stack Trace: " + exception.InnerException.StackTrace.ToString());

            str.Append("\r\n Request Host: " + Request.UserHostAddress.ToString());

            str.Append("\r\n Host Name: " + Request.UserHostName.ToString());

            str.Append("\r\n User Agent: " + Request.UserAgent.ToString());

            str.Append("\r\n URL Referrer: " + Request.UrlReferrer.ToString());

            str.Append("\r\n UserName:  " + Request.LogonUserIdentity.Name.ToString());

            str.Append("\r\n Method: " + exception.TargetSite.ToString());

            str.Append("\r\n Source: " + exception.Source.ToString());

 

Code 1.4

 

         Esse código eu peguei o Erro, Detalhes do erro, StackTrace, Request Host (de onde veio), o usuário, url referente, método que ocorreu o problema e a fonte.

         Depois de separar todos os erros possíveis, é necessário enviar e-mail ou gravar em eventview.

 

 

            MailMessage msg = new MailMessage();

            msg.From = new MailAddress("email automatico do sistema");

            msg.To.Add("seu-email");

            msg.Subject = "Error occurred in personal website application";

            msg.IsBodyHtml = true;

            msg.Body = str.ToString();

 

            SmtpClient smtp = new SmtpClient();

            smtp.Send(msg);

 

            String LogName = "Application";

            if (!EventLog.SourceExists(LogName))

            {

                EventLog.CreateEventSource(LogName, LogName);

            }

            EventLog Log = new EventLog();

            Log.Source = LogName;

            Log.WriteEntry(str.ToString(), EventLogEntryType.Error);

 

Code 1.5

 

         Na referência 1.5 envio e-mail e gravo no eventview do sistema operacional.

         Para finalizar, apago o erro doservidor. (Code 1.6)

 

 

            ctx.Server.ClearError();

 

Code 1.6

 

Espero ter entendido,qualquer coisa entre em contato pelo site.