Trace

<< Click to Display Table of Contents >>

Navigation:  ASP.NET > Dicas básicas >

Trace

Previous pageReturn to chapter overviewNext page

Tracing é um processo de coleta de informações da aplicação em execução para facilitar o debug.

 

TraceContext

 

Este classe é responsável por exibir todas as informações obtidas com o Trace da execução da página

 

Por padrão, o Trace não vem habilitado na sua página. Para exibir as informações de Trace no rodapé de sua página adicione Trace = “True” na diretiva Page de sua página. Lembrando que a utilização na diretiva da página sobrescreve as configurações do Trace no arquivo Web.Config. Segue abaixo um exemplo de utilização na diretiva Page:

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Trace="true" Inherits="_Default" %>

 

Para testar o trace:

 

 Trace.Write("Teste 1"); // esse fica em preto

 Trace.Warn("Alerta 1"); // esse fica em vermelho

 

Ao rodar o aplicativo:

 

trace

 

 

Você pode também ativar via código.

Remova da diretiva de página e faça esse código:

 

  protected void Page_Load(object sender, EventArgs e)

   {

       Trace.IsEnabled = true;

   }

 

Web.config

 

No Web.Config, através do elemento <trace>, é possível habilitar a saída tanto na página quanto em um arquivo separado chamado trace.axd que pode ser acessado na raiz da aplicação, lembrando que esse arquivo não existe fisicamente, apenas na memória. Os atributos do elemento <trace>

 

<configuration>

 <system.web>

 

   <trace enabled="true"

          requestLimit="10"

          pageOutput="false"

          traceMode="SortByTime"

          localOnly="true" />

   

 </system.web>

</configuration>

 

 

enabled

indica se o Trace será habilitado na aplicação. Se “True”, as informações do Trace podem ser vistas no “trace viewer”, ou seja, no arquivo trace.axd

localonly

indica se o “trace viewer” poderá ser visualizado apenas no cliente local ou por qualquer cliente

pageOutput

indica se as informações do Trace serão exibidas nas páginas

requestLimit

informa a quantidade de requisições a serem armazenadas no Trace

traceMode

informa a ordem das mensagens a serem exibidas no Trace

 

Para visualizar, basta colocar o nome trace.axd no endereço do navegador:

 

trace2

 

 

Diagnostics.Trace e Diagnostics.Debug

 

Uma observação muito importante é não confundir o Page.Trace com a classe Trace, pois, enquanto o Page.Trace retorna um objeto da classe TraceContext, a classe Trace retorna da classe System.Diagnostics.

 

Podemos informar dois tipos de configuração no nosso projeto – DEBUG e RELEASE – sendo que ambos – Trace e Debug – são compilados caso seja definido modo DEBUG, e apenas o Trace é compilado caso a configuração do projeto esteja em modo RELEASE.

 

Essas classes são muito úteis na busca de erros e na correção dos mesmos, até mesmo quando você possui um código que insere em algum banco de dados, você pode verificar quais os valores passados no Trace ou Debug antes de inseri-los no Banco.

 

Por padrão a saída dos métodos de ambas as classes é feita na janela Output do VisualStudio .NET, mas podemos utilizar a coleção Listerners para termos outros tipos de saída. Alguns dos métodos mais utilizados para essas saídas são:

 

Write

escreve uma informação – sem condições adicionais;

WriteLine

escreve uma informação – sem condições adicionais – uma por linha

WriteIf

escreve uma informação, apenas se a condição informada for verdadeira

WriteLineIf

escreve uma informação, apenas se a condição informada for verdadeira – uma por linha

Assert

verifica a condição, se a condição for falsa, escreve a mensagem

Fail

escreve uma mensagem de erro

 

Exemplos de Utilização

 

using System.Diagnostics;

 

  int A = 0, Z = 0;

   System.Diagnostics.Trace.Write("Escrever mensagem");

   System.Diagnostics.Trace.WriteLine("Escreve mensagem por linha");

  Debug.WriteIf(A == Z, "A é igual a Z");

  Debug.WriteLineIf(A == Z, "A é igual a Z");

   System.Diagnostics.Trace.Assert(A == Z, "X não é igual a Y!");

  Debug.Fail("Mensagem de erro.");

 

Trace Listerners

 

Comentamos bastante sobre os Listerners até agora! Agora veremos como funciona na prática os Listerners. Eles são responsáveis pela exibição das mensagens enviadas através dos objetos Trace e Debug.

 

A classe TraceListerner, trata-se de uma classe abstrata composta por três implementações, são elas:

 

DefaultTraceListerner

Exibe as mensagens no janela Output do VisualStudio.NET – padrão

TextWriterTraceListerner

Escreve as mensagens em um objeto do tipo Stream, ou seja, podendo gravar em arquivos .txt.

EventLogTraceListerner

Escreve as mensagens no Event Log do Windows

 

Abaixo segue um exemplo de utilização da classe:

 

      FileStream objStream = new FileStream("C:\\AppLog.txt", FileMode.OpenOrCreate);

 

      try

       {

          TextWriterTraceListener objTraceListener = new TextWriterTraceListener(objStream);

           System.Diagnostics.Trace.Listeners.Add(objTraceListener);

           System.Diagnostics.Trace.WriteLine("Hello 15Seconds Reader -- This is first trace message");

           System.Diagnostics.Trace.WriteLine("Hello again -- This is second trace message");

          Debug.WriteLine("Hello again -- This is first debug message");

       }

      catch (Exception)

       {

           System.Diagnostics.Trace.Flush();

           objStream.Close();

       }

 

Observação do Junior: esse exemplo acima até criou o arquivo, mas não gravou nada dentro - parece que foi erro de permissão

 

Conclusão

 

As classes TextContext, System.Diagnostics.Trace e System.Diagnostics.Trace podem ser de grande valia tanto no desenvolvimento de nossas aplicações quanto na manutenção das mesmas na busca e correção de erros.