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

Tracing in ASP

Geschrieben von: Christoph Wille
Kategorie: ASP Tricks

This printed page brought to you by AlphaSierraPapa

Die Möglichkeiten für ein vernünftiges Tracing unter ASP sind eingeschränkt, da man sich mit Response.Write Statements entweder das Layout zerstört, oder im Falle von notwendigen Redirects überhaupt große Probleme bekommt. Man könnte also glauben, daß es keine coole Lösung gibt - aber schließlich heißt glauben nicht wissen!

Es ist hin und wieder ganz nützlich, wenn der eigene Programmier-Background C++ ist. Denn unter C++/WIN32 gibt es etliche APIs für das Debugging, und unter diesen findet sich die Funktion OutputDebugString. Warum also nicht diese in eine Komponente verpacken und dann mit den Debugging Tools die Debugging Meldungen anzeigen?

Genau das machen wir heute, allerdings verwenden wir ein spezielles Tool, um uns die Debugging Meldungen anzeigen zu lassen: DebugView von SysInternals. Es ist erstens gratis, und kann zudem etwas zweites sehr cooles: es kann auf andere Rechner verbinden! Das heißt, man kann sich während ASP Seiten auf einem Webserver ausgeführt werden, sich die Debugging Meldungen bequem auf einer anderen Workstation ansehen - mit allen Vorteilen, ohne Nachteile!

Die AspDbg Komponente

Auf die Programmierung der Komponente möchte ich nicht allzu genau eingehen. Sie ist eine einfache ATL Komponente (also sehr schnell), und besitzt nur eine einzige Funktion, die ich eingebaut habe - zum Aufruf der OutputDebugString Funktion:

STDMETHODIMP CTrace::Write(BSTR lpszTraceString)
{
	USES_CONVERSION;
	OutputDebugString(W2A(lpszTraceString));
	return S_OK;
}

Die Komponente ist sowohl im Sourcecode als auch kompiliert als aspdbg.dll im heutigen Download mit dabei. Vor der Verwendung muß diese (wie immer) registriert werden:

regsvr32.exe aspdbg.dll

Implementierung des Tracings

Jetzt geht's an die Verwendung der Komponente. Klarerweise kann man die Komponente schon jetzt an beliebiger Stelle verwenden, allerdings sollte man sich schon die Mühe machen, eine kleine "Schnittstelle" rund um die Komponente zu programmieren.

Der Grund dafür? Nun, damit man einfach das Tracing ein- und ausschalten kann, oder eigene Zusatzparameter an den Debug-Output weitergeben kann. Ich habe eine solche einfache Schnittstelle in der Datei traceinclude.asp programmiert.

<script language="vbscript" runat="server">
Dim m_xTraceObj
Const bDebugFlag = True
Const cstrPrefix = "ASP: "

Sub TraceWrite(ByVal strTraceMessage)
  If bDebugFlag Then
    If Not IsObject(m_xTraceObj) Then
      Set m_xTraceObj = New Trace
    End If
    m_xTraceObj.Write strTraceMessage
  End If
End Sub

Sub TraceWarn(ByVal strWarnMessage)
  If bDebugFlag Then
    If Not IsObject(m_xTraceObj) Then
      Set m_xTraceObj = New Trace
    End If
    m_xTraceObj.Warn strWarnMessage
  End If
End Sub

Class Trace
 Public Sub Write(ByVal strTraceMessage)
   InternalWrite strTraceMessage
 End Sub

 Public Sub Warn(ByVal strTraceMessage)
   InternalWrite ">Warning< " & strTraceMessage
 End Sub

 Private Sub InternalWrite(ByVal strTraceMessage)
   Dim objTrace
   If bDebugFlag Then
     Set objTrace = Server.CreateObject("AspDbg.Trace")
     objTrace.Write cstrPrefix & strTraceMessage
     Set objTrace = Nothing
   End If
 End Sub
End Class

</script>

Die COM Komponente wird nur in der Funktion InternalWrite aufgerufen, die selbst in einer VBScript Klasse gekapselt ist. Der Grund hierfür ist, daß ich alle Tracing Funktionalität leicht erweiterbar in einem eigenen Objekt haben möchte - wie ASP.NET (siehe der Artikel Tracing in ASP.NET).

Das Objekt selbst greife ich nie direkt an, sondern habe weitere Wrapperfunktionen namens TraceWrite und TraceWarn geschrieben. Der Grund? Auf diese Art können auch andere Scriptsprachen ohne Umwege darauf zugreifen - auch ich verwende die Funktionen, und nicht die Objekte - so gezeigt in der Beispieldatei trace.asp.

<!-- #include file="traceinclude.asp"-->
<% Option Explicit %>
<%
TraceWrite "Das ist ein Test"
TraceWarn "Das ist eine Warnung!"
%>

Die Funktionen werden nun aufgerufen, und der Output erstellt - aber wie komme ich an diesen heran? Das ist der Punkt, wo das Programm DebugView die Bühne betritt.

Die Meldungen anzeigen

Der Mißbrauch des DebugView Tools für diese Zwecke ist ob seines großen Leistungsumfanges beinahe schon als Gemeinheit zu bezeichnen. Aber der Zweck heiligt die Mittel, wie's so schön heißt. Dennoch die Empfehlung, sich das Tool genauer anzueignen, da es auch für andere Verwendungsfälle sehr gut geeignet sein kann.

Das Programm benötigt keine Installation, nur Download und Entzippen. Daher ist es auch nach Doppelklicken auf die DbgView.Exe sofort einsatzbereit:

Hier werden die Tracing-Meldungen von trace.asp bereits angezeigt. Wer jetzt ein bischen herumexperimentiert wird sehen, daß sich auch andere Meldungen hier in diesem Fenster finden werden - außer man filtert den Output entsprechend. Dies gelingt über das Edit Menü, Menüpunkt Filter/Highlight:

Das ist auch der Grund, warum ich die Konstante cstrPrefix in traceinclude.asp definiert habe: auf diese Art und Weise limitierte ich DebugView auf die Anzeige meiner Events. Dies könnte sogar soweit gehen, daß bestimmte Funktionalitätsgruppen einer ASP Anwendung eigene Prefixes bekommen, nach denen ich dann filtern kann. Zum Beispiel zur Überwachung des Shops - das ist nur einer von vielen Anwendungsfällen.

Schuldig bin ich noch, wie man zu einem anderen Server verbindet: einfach Computer/Connect anwählen, Rechnernamen eingeben, fertig. Schon kann man den Webserver der Wahl und seine Debugging-enabled Seiten überwachen.

Apropos - ein weiteres Feature möchte ich natürlich auch nicht verschweigen: alle Logs können in Dateien exportiert werden. Ein mögliches Einsatzgebiet wäre die Testabteilung, die die Site testet, und im Fehlerfall das Tracelog zur Fehlerbehebung mitschicken kann.

Schlußbemerkung

Mit etwas Kreativität kann man ASP auch sehr sinnvolle Funktionalitäten beibringen. Allerdings sind diese meist nur mit C++ Kenntnissen zu erreichen.

This printed page brought to you by AlphaSierraPapa

Download des Codes

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

Verwandte Artikel

Klassen in VBScript
http:/www.aspheute.com/artikel/20000526.htm
Show me the source - Includes aufgelöst
http:/www.aspheute.com/artikel/20020503.htm
Tracing in ASP.NET
http:/www.aspheute.com/artikel/20001006.htm

Links zu anderen Sites

DebugView Download
http://www.sysinternals.com/ntw2k/freeware/debugview.shtml

 

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