Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Tracing in ASP.NET

Geschrieben von: Christoph Wille
Kategorie: ASP.NET

This printed page brought to you by AlphaSierraPapa

Wer hat nicht schon einmal zu Debuggingzwecken das Response.Write Statement verwendet, um sich SQL Strings, Servervariablen, Variablenwerte und Rechenergebnisse auszugeben? Meistens hat man sich dadurch das Layout (kurzfristig) zerstört, und man mußte die Statements später wieder löschen oder auskommentieren.

Ebenso beliebt wie schwierig ist das Messen der Geschwindigkeit einzelner Codeblöcke - entweder man zieht eine externe Komponente zu Rate, oder es geht nicht. Mit all diesen Unzulänglichkeiten räumt die Tracing Funktionalität von ASP.NET auf: man kann Debugmeldungen ausgeben, und die Zeit eines Scripts timen - und das, ohne zwischen Test- und Releaseversion einer ASP.NET Seite Unterschiede machen zu müssen.

Ausgangsbasis der ganzen Beispiele des heutigen Artikels ist ein zugegebenermaßen wirklich einfaches Script:

<% @Page Language="C#" %>
<%
Response.Write("Trace Test");
%>

Das Tracing kann per Seite ein- bzw. ausgeschaltet werden, als auch für alle Seiten einer gesamten Applikation. Anhand des obigen Beispiels werde ich beides erklären, und beginne mit dem Tracing auf Seitenbasis.

Tracing auf per-Seiten Basis

Die einfachste Methode des Tracings ist es pro Seite ein- oder auszuschalten. Dazu muß man nur das Trace Attribut in der Page Direktive auf True setzen (pagetrace.aspx):

<% @Page Language="C#" Trace="True" %>
<%
Response.Write("Trace Test");
%>

Durch diesen "Eingriff" wird die Tracinginformation an das Dokument angehängt. Dies zeigt der folgende Screenshot:

Die Informationen, die man erhält, sind sehr vielfältig (nicht alles ist im Screenshot sichtbar):

Damit hat man automatisch (ohne selbst etwas zu programmieren) bereits sehr viel Debugginginformation an der Hand.

Die einzige von ASP.NET noch zusätzlich zur Verfügung gestellte Option ist daß man sich die Trace Information nicht nach Zeit, sondern nach Ereigniskategorie anzeigen lassen kann. Dazu muß man das TraceMode Attribut in der Page Direktive verändern (pagetrace-bycategory.aspx)):

<% @Page Language="C#" Trace="True" TraceMode="SortByCategory" %>
<%
Response.Write("Trace Test");
%>

Wenn alles gutgeht, sieht der Trace dann so aus:

Da die Seite (fast) nichts an Code ausführt, sind die Zeiten alle nahe bei 0. Sobald man allerdings zu programmieren beginnt, erhält man hier eine gute Möglichkeit herauszufinden, welche Aufgabe wie lange gedauert hat.

Tracing auf per-Applikations Basis

Die zweite Variante des Tracings ist die der Kontrolle auf Ebene der Applikation. Dies beinflußt alle Seiten, und man kann es so machen, daß man eine zentrale Seite hat, auf der die Tracinginformationen angezeigt werden.

Da ich von Tracing auf Applikationsebene spreche, kann es sich nur um Einstellungen handeln, die in der Datei web.config gemacht werden (im Root der jeweiligen Applikation abgelegt). Der folgende Code zeigt ein Beispiel, wie man Tracing einschalten kann (web.config):

<configuration>
 <system.web>
  <trace enabled="true" requestLimit="40" 
         pageOutput="false" traceMode="SortByTime"/>
 </system.web>
</configuration>

Das trace Statement hat fünf (optionale) Parameter, die folgende Funktionen haben:

Wenn man diese Änderungen an der Datei web.config durchgeführt hat (und einige Seiten aufgerufen hat), kann man sich die Tracestatistiken mit Hilfe der von ASP.NET automatisch eingemappten Datei trace.axd ansehen:

Die Datei pagetrace.aspx ist uns schon bekannt, allerdings hat tracetest.aspx einige interessante Funktionen, die wir uns in der nächsten Sektion ansehen werden. Ebenso gehen wir dann ins Detail - mit dem View Details Link.

Tracemeldungen ausgeben

Bis jetzt haben wir uns mit Tracemeldungen des Systems zufrieden gegeben. Jetzt wollen wir unsere eigenen Meldungen mit in die Traceinformationen aufnehmen. Dazu bietet uns das Trace Objekt zwei Funktionen: Trace und Warn (tracetest.aspx):

<% @Page Language="C#" Trace="True" %>
<%
Trace.Write("Kategorie","Meldungstext");
Trace.Warn("Kategorie", "Meldungstext");
%>

Beide Funktionen erwarten einen Kategoriestring und den Meldungstext. Der einzige Unterschied ist der, daß Warn den Text in roter Farbe darstellt (diese Seite erreicht man über den View Details Link):

Die Traceinformationen sind die gleichen, die man auch für das Seiten-weise Tracing erhält.

Die globalen Tracing Einstellungen

Zu guter letzt habe ich noch die Standardeinstellungen für das Tracing nachzutragen. Diese Standardeinstellungen finden sich in der globalen machine.config, welche in folgendem Folder zu finden ist (Versionsnummer könnte differieren):

Die Einstellungen in dieser machine.config sind wie folgt:

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

Wie man sieht, sind aus Gründen der Geschwindigkeit alle Tracingfunktionen ausgeschaltet - und das sollte auf einer Produktionsmaschine auch immer der Fall sein!

Schlußbemerkung

Das Beispiel war nicht sehr lang, hat aber deutlich gezeigt, wieviel Information man automatisch in die Hand "gedrückt" bekommt. Mit Hilfe des Trace Objekts kann man dann das ausgeben, wozu man heute Response.Write mißbraucht - und bekommt alles noch schön sortiert angezeigt.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20001006.zip

Verwandte Artikel

Formularbasierte Authentifizierung in fünf Minuten
http:/www.aspheute.com/artikel/20020705.htm
Performancemessungen in .NET
http:/www.aspheute.com/artikel/20011206.htm
Tracing in ASP
http:/www.aspheute.com/artikel/20010423.htm
Web.Config 101
http:/www.aspheute.com/artikel/20010802.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.