Busca Online:

 
Seja bem vindo(a) Visitante, você não está logado deseja logar
no portal para participar de serviços e promoções ? clique aqui.


No caso de perder a senha, acesse aqui e receba por e-mail.
Deseja entrar em contato conosco, acesse aqui e mande-nos um e-mail.

Detectando erro a todo custo

por Mauricio Junior em 1/1/2011 0


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.

voltar   comente  subir

Download Copy





 
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

Inserindo no Sql Server
Windows Phone 7 Action Pack - Vídeo Tutorial
Atalho novo, formatar e concatenar usando Visual Studio .NET 2010
Adicionando Menu no DataGridView
Utilizando o GridView e DetailsView
Sistema de Login com ASP 3.0 usando três camadas – Parte I
Pegando dados do computador facilmente via software
iSecurity Password Free
LER: prevenir ou remediar?
Método SHA 256
Clique ENTER usando C#.NET
Pagamento via celular
Entrevista com Bruno PorKaria
WebServices usando soapHeader
IsDecimal
Misturando dados
Visual SourceSafe - Série 5
2 Eventos, 1 dia: Mix On UniEURO
Trabalhando com GridView e DataKeyNames com Várias Chaves
Visual Studio .NET 2010 com temas
Sistema de Login em ASP Utilizando três camadas - Parte VIII
Apresentação do Windows
CRIANDO MENU DINÂMICO COM C#.NET Passo 1
Public Interface
Windows 7 funciona até no Mac
Envio de e-mail através de formulário web
Verifica Browser utilizando C#
Mais um certificado Microsoft
Mais detalhes sobre o HTC Touch HD 2 com o possível Windows Mobile 7
Artigo criando atalhos para a sua aplicação.
Vídeo - Microsoft Surface Sphere
Trabalhando com o componente TabContainer
Vídeo-Aula: Criando um Sistema para Celular com Banco de Dados
Visual SourceSafe
Usando o Flash para Desenvolver Game no Microsoft XNA Developer




eCode10 Magazine 4 Edição

Baixe a sua sem pagar nada, basta apenas ter um cadastro na comunidade aspneti.com ou ser usuário do ecode10.com.



Edições anteriores
LAYERDEV

Notícias *

Notebook 3D ou 4K?

Notebook vem com tudo...

Visão do Futuro - Day of Glass 2

Futuro próximo pode chegar cedo?...

Lenovo de 14 polegadas IdeaPad

Veja o novo notebook Lenovo IdeaPad...

Windows 8 Store

Channel9 publica um vídeo da Windows Store...

Sony Vaio série Z

Novo Vaio Ultrabook? ou não Ultrabook?...

Samsung quer comprar RIM

Imagine se juntar as duas companhias...

Surface 2.0 mostrado

Novo Surface é mostrado de forma incrível...

Skype Tablet

Será que esse skype tablet pega mesmo?...

Lenovo e o seu novo Ultrabook

Ultrabook chega também pela Lenovo...




NETITC