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. BombonatoAntigamente 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