Tracing de aplicações ASP.NET no IIS 7.x/8

Olá pessoal!

Poucos desenvolvedores fazem uso de um dos recursos mais interessantes disponíveis para aplicações ASP.NET, a capacidade de criar traces diretamente a partir do seu código e usá-los para resolver problemas durante a etapa de desenvolvimento.

O uso de "técnicas para criação de traces" é algo muito comum: lembra-se de ter escrito um bom e velho "Response.Write" em aplicações ASP Clássico para validar se os dados em uma determinada rotina está conforme o esperado? Pois é... era assim no ASP Clássico, em C, C++, etc

Nas aplicações ASP.NET este processo é realmente muito simples: basta habilitar o registro de entradas de trace no arquivo web.config, adicionando a seguinte tag:

<trace enabled="true" localOnly="false" pageOutput="false" />

Maiores detalhes sobre a diretiva <trace> do arquivo web.config pode ser obtida em: https://msdn.microsoft.com/en-us/library/6915t83k(v=vs.80).aspx

Com a diretiva trace configurada no seu arquivo web.config agora basta adicionar as diretivas de trace em sua aplicação. O desenvolvedor deverá adicionar algumas linhas de código na sua aplicação, para imprimir os valores que precisam ser validados. Para isso, em cada modulo que se deseja utilizer o trace, deve-se adicionar o namespace System.Web. Um exemplo simples do uso de trace em uma página ASP.NET (em C# e .NET Framework 4.5) é mostrado a seguir:

using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls;

namespace TraceSample {   public partial class LongRunningPage : System.Web.UI.Page   {     protected void Page_Load(object sender, EventArgs e)     {       //       // This is just a page where any GET requests will take...       // well, very long

      Trace.Warn("Warning! Entering in the PAGE_LOAD event");

      DateTime start = DateTime.Now;       int delay = new Random().Next(5000, 15000);       Thread.Sleep(delay);

DateTime end = DateTime.Now; myLabel.Text = String.Format("Total page exec took:{0} ms", (end - start).TotalMilliseconds);

      Trace.Write("PAGE_LOAD event finished");

    }   } }

No código acima você encontra duas diretivas: Trace.Warn e Trace.Write ... existem poucas diferenças entre elas, a mais visível é que a primeira irá produzir uma entrada em vermelho na saída do trace.

Uma vez que o código da aplicação tenha sido ajustado para criar a saída necessária, você poderá acessar a página e testar a sua aplicação. Após ter executado a página, você poderá visualizar o resultado do trace através do handler TRACE.AXD. Por exemplo, se a página chama-se LongRunning.aspx., você deve primeiro chamar:

https://meusite/LongRunning.aspx

e depois:

https://meusite/trace.axd

Com isso, uma página de trace similar ao seguinte sera exibida:

 

image

Ao se clicar em uma das entradas você poderá observer detalhes do trace daquela página, algo similar ao seguinte:

image

Acima podemos ver o resultado das diretivas de trace que foram adicionadas no código da aplicação. Voilá!

Agora, o mais um ponto: É possível visualizar o resultado das diretivas Trace.Warn nos logs FREB (ou Failed Request Tracing) do IIS. Basta configurar o seu servidor para gerar este tipo de log (conforme as regras que você estabelecer) e ao visualizá-lo você encontrará as saídas geradas pelo seu aplicativo.  Esta é a outra diferença entre as duas diretivas: Trace.Write não irá aparecer nos logs do IIS, e portanto, se precisar usar este recurso de uma forma regular, use somente o Trace.Warn.

E finalmente, aquela dica de sempre: não deixe as diretivas de trace habilitadas em servidores de produção! Sempre podem existir questões relacionadas à segurança de sua aplicação e não custa descuidar!

É isso ai! Não perca tempo e aproveite para usar este recurso durante o processo de desenvolvimento da sua aplicação.

 

Abraços,

PT