Tracing in ASP.NET
Geschrieben von: Christoph Wille 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 BasisDie 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 BasisDie 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 ausgebenBis 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 EinstellungenZu 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ßbemerkungDas 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 CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Formularbasierte Authentifizierung in fünf Minuten 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.
©2000-2006 AspHeute.com |