Visual Studio.NET 2005

 

 

Olá pessoal, sou o Mauricio Junior e estou disposto a ensinar nessa parte II como gravar e mostrar o funcionamento para gravar o erro gerado em sua aplicação. É muito importante usar uma funcionalidade dessas na aplicação.

 

A cada erro que ocorrer dentro do software, site ou sistema interno o mesmo irá gravar em um arquivo de log, que pode ser visualizado em qualquer hora. O mesmo mostra a linha, a classe, hora, data e o erro em si do que aconteceu. Facilita muito para ser resolvido o problema.

 

A parte I criada anteriormente, pode ser acessada pelo link:

www.aspneti.com ou www.aspneti.com.br

 

Não posso deixar de falar da nova ferramenta express criada pela Microsoft. É uma ferramenta grátis para o desenvolvimento e pode ser adquirida via internet. Tanto o banco de dados quanto a ferramenta de desenvolvimento pode ser baixada gratuitamente.

 

http://msdn.microsoft.com/vstudio/express/

 

Continuando, na parte I mostrei o método principal que escreve dentro do arquivo de log no diretório do sistema. Nessa parte mostrarei os outros métodos construtores dentro da classe.

 

Como já foi falando junto a parte I, criei uma classe chamada AppException.cs. (Referência 1.1)

 

Referência: 1.1 – Exception Parte II

 

 

Já foi mostrado o método LogError anteriormente explicando linha por linha. (Referência 1.2 – Exception Parte II)

 

 

public static void LogError(string message)

                   {

                            HttpContext context = HttpContext.Current;

                            string filePath = context.Server.MapPath(System.Convert.ToString(System.Configuration.ConfigurationSettings.AppSettings["ErrorLogFile"]));

                            int gmtOffset = DateTime.Compare(DateTime.Now, DateTime.UtcNow);

                            string gmtPrefix;

                            if (gmtOffset > 0)

                            {

                                      gmtPrefix = "+";

                            }

                            else

                            {

                                      gmtPrefix = "";

                            }

                            string errorDateTime = DateTime.Now.Year.ToString() + "." + DateTime.Now.Month.ToString() + "." + DateTime.Now.Day.ToString() + " @ " + DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Second.ToString() + " (GMT " + gmtPrefix + gmtOffset.ToString() + ")";

                            try

                            {

                                      System.IO.StreamWriter sw = new System.IO.StreamWriter(filePath, true);

                                      sw.WriteLine("## " + errorDateTime + " ## " + message + " ##");

                                      sw.Close();

                            }

                            catch

                            {

                            }

                   }

 

Referência: 1.2 – Exception Parte II

 

No passo seguinte, dentro da mesma classe criei os métodos construtores. (Referência 1.3 – Exception Parte II).

 

 

          public AppException()

                   {

               //apenas chamo o método para log de erro

                            LogError("An unexpected error occurred.");

                   }

 

                   public AppException(string message)

                   {

               //chamo o método passando o parâmetro passado na assinatura do método.

                            LogError(message);

                   }

 

                   public AppException(string message, Exception innerException)

                   {

               //mandando a mensagem para o log de erro

                            LogError(message);

                            if (innerException != null)

                            {

                    //se a mensagem de exception for diferente de null o mesmo manda as mensagem para a classe de log de erro.

                                      LogError(innerException.Message);

                                      LogError(innerException.StackTrace);

                            }

                   }

 

Referência: 1.3 – Exception Parte II

 

Explicação:

 

Note que a referência 1.3 possui o comentário de todas as linhas dos métodos construtores. Existem três métodos, um sem parâmetro de entrada, outro com parâmetro de entrada do tipo string, cujo recebe apenas uma mensagem e outro método recebendo uma string mensagem e uma exception, ou seja, uma mensagem do tipo Exception.

Todos os métodos possuem o mesmo nome, isso significa que é sobre posição de método.

 

Se tiver alguma dúvida em relação ao código mostrado, leia o comentário de cada linha.

 

 

 

 

 

 

Configuração

 

O próximo passo é configurar endereço do arquivo log. Esse arquivo de configuração dentro da aplicação pode ser o web.config ou o app.config sem problema algum. (Referência 1.4 – Exception Parte II)

 

 

   <appSettings>

 

     <add key="ErrorLogFile" value="~/Errors/ErrorLog.txt" />  

 

  </appSettings> 

 

Referência: 1.4 – Exception Parte II

 

Explicação:

 

Existe a tag <appSettings> onde posso atribuir qualquer tipo de código ou endereço que quiser. No meu caso, coloquei uma chave chamada ErrorLogFile, com o valor indicando o endereço do arquivo .txt. (Referência 1.5 – Exception Parte II).

 

 

<add key="ErrorLogFile" value="~/Errors/ErrorLog.txt" />  

 

Referência: 1.5 – Exception Parte II

 

O arquivo .txt já criado e colocado dentro da pasta Errors não tem nada dentro. (Referência 1.6 – Exception Parte II)

 

Referência: 1.6 – Exception Parte II

 

É um arquivo simples e qualquer.

 

Pronto, depois e ter o arquivo, criar a classe de appException.cs, criar os métodos necessários; só falta forçar um erro para mostrar a real funcionalidade.

Para quem não entendeu direito ou precisa do código da classe inteiro, segue a referência 1.7 com todo o conteúdo necessário.

 

 

using System;

using System.Diagnostics;

using System.Web;

 

namespace WebChamps.Components.Web

{

         /// <summary>

        

         /// </summary>

         public class AppException: System.ApplicationException

         {

                   public AppException()

                   {

                            LogError("An unexpected error occurred.");

                   }

 

                   public AppException(string message)

                   {

                            LogError(message);

                   }

 

                   public AppException(string message, Exception innerException)

                   {

                            LogError(message);

                            if (innerException != null)

                            {

                                      LogError(innerException.Message);

                                      LogError(innerException.StackTrace);

                            }

                   }

 

                  

 

                   public static void LogError(string message)

                   {

                            HttpContext context = HttpContext.Current;

                            string filePath = context.Server.MapPath(System.Convert.ToString(System.Configuration.ConfigurationSettings.AppSettings["ErrorLogFile"]));

                            int gmtOffset = DateTime.Compare(DateTime.Now, DateTime.UtcNow);

                            string gmtPrefix;

                            if (gmtOffset > 0)

                            {

                                      gmtPrefix = "+";

                            }

                            else

                            {

                                      gmtPrefix = "";

                            }

                            string errorDateTime = DateTime.Now.Year.ToString() + "." + DateTime.Now.Month.ToString() + "." + DateTime.Now.Day.ToString() + " @ " + DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Second.ToString() + " (GMT " + gmtPrefix + gmtOffset.ToString() + ")";

                            try

                            {

                                      System.IO.StreamWriter sw = new System.IO.StreamWriter(filePath, true);

                                      sw.WriteLine("## " + errorDateTime + " ## " + message + " ##");

                                      sw.Close();

                            }

                            catch

                            {

                            }

                   }

         }

}

 

Referência: 1.7 – Exception Parte II

 

 

Na parte III mostrarei como utilizar a classe de erro usando como componente referenciado.

 

Espero ter ajudado de alguma forma.

 

Maurício Junior

www.ascompras.com

www.aspneti.com

mauricio@ascompras.com