Gravando Erros com Exception no arquivo de log . Parte II
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
Sign up to our newsletter
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.