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

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Tracing in ASP.NET

Geschrieben von: Christoph Wille
Kategorie: ASP.NET

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):

  • Details zur Anfrage (Request Details)
  • Informationen zum Trace - mit Zeitmessung (Trace Information)
  • Der Abhängigkeitsbaum der Web Form Controls auf dieser Seite (Control Tree)
  • Cookies Collection - ein Dump aller Cookies
  • Headers Collection - ein Dump aller Request Header
  • Weiters: alle Server Variablen werden gedumpt.

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:

  • enabled: Gibt an, ob das Tracing eingeschalten (True) oder abgeschalten (False) ist.
  • requestLimit: Anzahl der Requests, für die die Traceresultate gespeichert werden sollen.
  • pageOutput: True, falls man den Traceoutput an die Seite anhängen will, False, falls man die Ergebnisse auf einer separaten Seite angezeigt haben möchte.
  • traceMode: Definiert die Anzeige der Traceinformationen. SortByTime definiert Sortierung nach Ablauf der Ereignisse, SortByCategory nach Kategorie der Ereignisse.
  • localOnly: Gibt an, ob trace.axd nur lokal (True) anzeigbar ist. True ist die Standardeinstellung.

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.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Formularbasierte Authentifizierung in fünf Minuten
Performancemessungen in .NET
Tracing in ASP
Web.Config 101

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Eine weitere sehr hilfreiche Resource ist das deutsche ASP.NET Wiki, das als zentrale Anlaufstelle für Tips, Tricks, Know How und alles Nützliche was man in seinem Alltag als (ASP).NET-Entwickler so braucht und entdeckt gedacht ist.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

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