🔥 Apps, books, system as a service, podcast and more



Detectando erro a todo custo


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.

Sign up to our newsletter

Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.

Top