Desenvolvimento - ASP. NET

ASP.NET - Entendendo o Trace

Olá, neste artigo estarei abordando o Trace. Estarei explicando para que ele serve e como devemos utilizá-lo.

por Ícaro C. Bombonato



Olá, neste artigo estarei abordando o Trace. Estarei explicando para que ele serve e como devemos utilizá-lo.

Antigamente para debugar nossos sistemas, saber valores de variáveis e etc, tínhamos que utilizar o famoso response.write. Tendo em vista que está pratica não era muito boa, uma vez que tinhamos que ficar comentando nosso código a toda hora, no ASP.NET estaremos utilizando o Trace.

Através do Trace podemos saber valores de variáveis de sessão, cookies, viewstates, variáveis do servidor, arvore de controles da página e as coleções Form e QueryString, dentre outras informações. Além de podermos escrever mensagens no mesmo.

Por questões de performance e segurança, recomendo que deixem o trace ativo somente enquanto estiverem desenvolvendo a aplicação, e ativá-lo em produção somente se necessário.

O trace está no namespace System.Web, e sua utilização é bem simples.

Temos dois métodos e duas propriedades que podemos utilizar.

Métodos:
Trace.write e Trace.warn. Os dois fazem a mesma coisa, escrevem algo no trace, a única diferença é que utilizando o Trace.warn, o texto aparece em vermelho.

Propriedades:
Trace.IsEnabled, com esta propriedade, verificamos se o trace está ativo ou não.
Trace.TraceMode, aqui definimos a ordenação do Trace, a mesma pode ser por Categoria ou por Hora.

Existem 2 níveis de trace: O de aplicação e o de página. No level de aplicação, o trace é ativado ou desativado para a aplicação inteira, através do web.config. Já no de página, o mesmo funciona isoladamente.

Para o level de página, devemos deixar o parâmetro trace="True" na diretiva Page.

Ex: <%@ Page Language="vb" AutoEventWireup="false" Codebehind="frmTrace.aspx.vb" Inherits="Artigos.frmTrace" trace="True"%>

Deixando o trace ativo em level de página, o mesmo aparecerá logo após nossa página ser carregada, no fim da mesma.

Vamos criar uma página simples para ver seu funcionamento. Adicione um titulo qualquer, e um Label chamado "lblStatus".

Na diretiva Page, deixe o parâmetro trace="true".

Agora no evento Page_Load coloque o seguinte código:

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
		Handles MyBase.Load

        "Verificamos se o trace está ativo
        If Trace.IsEnabled Then

            "Definimos a ordenacao do trace
            Trace.TraceMode = TraceMode.SortByTime

            "Escrevemos uma mensagem nele - categoria e mensagem
            Trace.Write("Valores Fixos", "Iniciando Page_Load")

            "Definimos o valor do label
            Me.lblStatus.Text = "O trace está ativo"

            "Escrevemos um alerta - Sem a categoria
            Trace.Warn("Valor do lblStatus: " & Me.lblStatus.Text)

            "definimos a cor do label
            Me.lblStatus.ForeColor = System.Drawing.Color.Green

            "escrevemos novamento no trace - com categoria
            Trace.Write("Valores Fixos", "Encerrando a página")

        Else

            "Definimos o label e a cor do mesmo, sem escrever no trace, 
			"uma vez que o mesmo está inativo
            Me.lblStatus.Text = "O trace está inativo"

            Me.lblStatus.ForeColor = System.Drawing.Color.Red
        End If
    End Sub

Rode sua aplicação exemplo e veja o que ocorre.

Reparem que o mesmo foi exibido logo após o conteúdo de nossa página.
Temos informações da mais variadas possíveis, mas estarei citando o que escrevemos no mesmo.
Veja na sessão Trace Information, que as mensagens que escrevemos está lá. Vamos ver o que ocorreu:

Primeiro verificamos que o trace estava ativo, depois entramos em sua condição e escrevemos "Inciando Page_Load" na Categoria "Valores Fixos", depois escrevemos o conteúdo do lblStatus nele utilizando o trace.warn, vejam que a única diferença é que o texto fica em vermelho. Após isso escrevemos mais uma mensagem com o trace.write.

Vale lembrar, que a categoria é opcional nos dois métodos, trace.write e trace.warn. Ela serve para deixarmos as mensagens um pouco mais organizadas e podem ser ordenadas pela mesma.

Agora desative o trace e veja o que ocorre, não aparecerá informação nenhuma na tela, alem do titulo e do label.

Vamos agora ao trace em level de aplicação.

No level de aplicação, devemos definir os padrões de configuração no web.config, na tag system.web. Vamos aos mesmos:

enabled: Ativa ou desativa o trace ("true" ou "false")

requestLimit: Define a quantidade de requisições que serão armazenadas no Trace.axd

pageOutput: Define se as informações do trace serão exibidas na página que foi carregada("true") ou através da página Trace.axd no root de nossa aplicação("false").

traceMode: Define a ordenação das informações no Trace, pode ser por categoria("SortByCategory") ou por tempo("SortByTime")

localOnly: Define se as informações do trace estarão acessíveis somente se estivermos no servidor("true"), ou se estará disponível de qualquer máquina que tente acessar o mesmo("false"). Vale lembrar que este parâmetro funciona somente em level de aplicação, em level de página ou se ativo via código, o trace sempre será exibido caso esteja ativo. Por razões de segurança, recomendo utilizar "true".

Vejam que eu citei sobre um tal de Trace.axd, é através desta página, que acessamos na raiz do site, que iremos visualizar as informações quando tivermos o pageOutput = "false", que ocorrerá na maioria de nossas aplicações.

Utilizaremos o mesmo exemplo acima, para ver o funcionamento em level de aplicação.

Vamos começar retirando o parâmetro trace e seu valor da nossa diretiva Page. Ex: <%@ Page Language="vb" AutoEventWireup="false" Codebehind="frmTrace.aspx.vb" Inherits="Artigos.frmTrace" %>

No web.config, configure com as seguintes opções:

<trace enabled="true" requestLimit="10" pageOutput="true" traceMode="SortByTime" localOnly="true" />

Veja que o resultado é idêntico ao primeiro exemplo. Só que agora podemos verificar um histórico do trace, através do trace.axd, que fica localizado na raiz do site.

Ex: http://localhost/Sua_Aplicacao/trace.axd

As entradas serão armazenadas no mesmo, até que se chegue em 10, conforme foi definido no parâmetro requestLimit.

Mudemos agora o parâmetro pageOutput para "false"; Vamos rodar novamente nossa aplicação e ver o que acontece.

Notem que o trace está ativo, porém as informações do mesmo não aparecem.

Para vermos, vamos utilizar o Trace.axd, que será exibido assim:

Notem que o root de minha aplicação é o diretório "Artigos", portanto acesso o mesmo através de Artigos/trace.axd.

Você pode mudar os valores dos parâmetros no web.config e ir vendo o que acontece. Não vou exemplificar um á um aqui, senão ficarei 1 dia inteiro escrevendo...

Estarei agora falando um pouco sobre cada sessão do trace, apenas para você saber para que a mesma serve.

Request Details: Exibe as informações sobre a requisição feita.

Trace Information: É a que vimos em nosso exemplo; Aqui são exibidas as mensagens que definimos, bem como algumas geradas pelo sistema.

Control Tree: Aqui temos a arvore de controles de nossa página.

Session State: Lista com as variáveis de sessão.

Application State: Lista com as variáveis de aplicação.

Cookies Collection: Aqui temos as informações sobre os cookies existentes quando a página foi carregada.

Headers Collection: Exibe informações do cabeçalho dá página.

Form Colletction: Exibe as informações postadas via método "post".

QueryString Collection: Exibe as informações postadas via QueryString.

Server Variables: Exibe as variáveis do servidor.

Bom pessoal, vou terminando por aqui...

Espero que vocês tenham entendido o trace e possam usufruir suas vantagens na hora de desenvolver uma aplicação.

Estou a disposição para eventuais dúvidas através do e-mail: icaro@codificando.net

Obrigado pela atenção dispensada.

Um abraço,
Ícaro Bombonato

Ícaro C. Bombonato

Ícaro C. Bombonato - Analista de Sistemas, formado em Criação e desenvolvimento de web sites, atualmente está cursando Pós-Graduação em "Desenvolvimento de software para Web" na UFSCar. Trabalha com .NET desde Agosto de 2002 e tem atuado em diversos projetos de todos os portes.