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