MSDN Magazin > Home > Ausgaben > 2008 > April >  Toolbox: Protokollieren von Webanwendungsfehler...
Toolbox
Protokollieren von Webanwendungsfehlern, Erlernen von LINQ und mehr
Scott Mitchell

Protokollieren und Überprüfen von Webanwendungsfehlern
Idealerweise würden in der Produktion keine Fehler auftreten. Die Datenbank- und Webserver würden nie ausfallen, und der Code würde gründlich getestet und so entworfen werden, dass er jeder Situation oder Eingabe gerecht wird, die andernfalls möglicherweise einen Fehler verursacht hätte. In der Realität ist die Programmierung jedoch von Fristen und immer neuen Featureanforderungen gekennzeichnet, und Datenbank- und Webserver sind manchmal nicht verfügbar. Wenn in einer Produktionsumgebung Fehler auftreten, ist es wichtig, dass die Details protokolliert werden und dass das Entwicklungsteam unverzüglich benachrichtigt wird.
Es gibt zwei verbreitete Lösungen für das Protokollieren von Fehlern in einer ASP.NET-Anwendung: die ASP.NET-Systemüberwachung und ELMAH (Error Logging Modules and Handlers) von Atif Aziz. Beide Systeme ermöglichen Entwicklern von Seiten das programmgesteuerte Protokollieren der Fehlerdetails in einer bestimmten Protokollquelle. Außerdem bieten beide Systeme Methoden für das automatische Protokollieren von Ausnahmefehlern.
Die Systemüberwachung von Microsoft ist ein stabiles systemnahes Framework, das in ASP.NET 2.0 eingeführt wurde. Zusätzlich zur Fehlerüberprüfung kann sie verschiedene andere Metriken aufzeichnen, einschließlich Lebenszyklusereignissen einer Anwendung wie dem Starten und Herunterfahren der Anwendung, Ereignissen auf Anforderungsebene sowie sicherheitsbezogenen Ereignissen, wie z. B. Zugriffsverletzungen und erfolgreichen bzw. fehlgeschlagenen Anmeldeversuchen.
Wenn ein überwachtes Ereignis stattfindet, kann es in einer beliebigen Anzahl definierter Protokollquellen protokolliert werden. Die Protokollierungsfunktionalität in der Systemüberwachung basiert auf dem Anbietermodell, sodass Entwickler einen benutzerdefinierten Protokollierungsanbieter anschließen oder einen der integrierten Anbieter verwenden können. Unter den integrierten Anbietern gibt es einen, der Ereignisdetails im Windows®-Ereignisprotokoll aufzeichnet, einen weiteren, der das Ereignis in der SQL Server-Datenbank protokolliert, sowie einen, der die Details an eine E-Mail-Adresse sendet.
Beginnen Sie mit der Systemüberwachung, indem Sie einfach der web.config-Datei der Anwendung das entsprechende Konfigurationsmarkup hinzufügen. Die Konfigurationsinformationen der Systemüberwachung müssen Folgendes enthalten: die zu überwachenden Ereignisse, die Protokollierungsanbieter sowie die Art der Überwachung für jedes zu protokollierende Ereignis.
Zusätzlich zu diesen grundlegenden Informationen kann das Konfigurationsmarkup z. B. folgende Optionen enthalten: ob die Protokollierung gepuffert werden soll; wie oft ein Ereignis mindestens stattgefunden haben muss, bevor das Protokollieren beginnt; und wie oft ein bestimmtes Ereignis höchstens aufgezeichnet werden muss, bevor zukünftige Instanzen ignoriert werden.
Bei der anderen verbreiteten Protokollierungsoption, ELMAH, handelt es sich um einen Satz von Open-Source-HTTP-Handlern und -Modulen. Die ASP.NET-Systemüberwachung kann also verschiedene Ereignisse überwachen, während ELMAH nur dafür entworfen wurde, Anwendungsfehler zu protokollieren. Wenn ein Fehler auftritt, protokolliert ELMAH die Details in einem bestimmten Protokollierungsanbieter und sendet, wenn gewünscht, bestimmten Empfängern eine E-Mail.
Es gibt einige integrierte und von Communitymitgliedern erstellte ELMAH-Protokollierungsanbieter, einschließlich einiger, die in einer XML-Datei, einer SQL Server®-Datenbank, einer Oracle-Datenbank und einer SQLite-Datenbank (einem einfachen Open-Source-Datenbankmodul) protokollieren.
ELMAH besitzt einige interessante Anzeigefunktionen und unterstützt alle Versionen von ASP.NET. Die ASP.NET-Systemüberwachung bietet keine Funktionalität zum Überprüfen der protokollierten Ereignisse, aber ELMAH enthält integrierte HTTP-Handler, die das Fehlerprotokoll von einer Webseite aus oder als RSS-Feed anzeigen können. Die Systemüberwachung funktioniert allerdings nur mit ASP.NET 2.0 und höher, während ELMAH mit ASP.NET 1.0 und höher funktioniert.
ELMAH wurde von mir zum ersten Mal im Toolbox-Artikel vom August 2006 behandelt (siehe msdn.microsoft.com/msdnmag/issues/06/08/Toolbox). Seitdem wurde ELMAH von Atif Aziz weiterentwickelt, sodass einige neue Features und Leistungsverbesserungen hinzugekommen sind, wie z. B. die Ausnahmefilterung.
Wie bereits erwähnt, protokolliert ELMAH standardmäßig alle Fehler im angegebenen Protokollierungsanbieter. Nun können Sie jedoch mit dem Ausnahmefilter festlegen, unter welchen Umständen ein Fehler ignoriert (und somit nicht protokolliert) werden soll. Ferner gibt Ihnen die aktuelle Version von ELMAH außerdem die Möglichkeit, das gesamte Fehlerprotokoll als .csv-Datei herunterzuladen, und bietet eine verbesserte Leistung bei großen Fehlerprotokollen.
Im Grunde bieten die Systemüberwachung und ELMAH die gleiche Funktionalität zum Protokollieren von Fehlern in einer ASP.NET-Anwendung. Einige Entwickler bevorzugen die Systemüberwachung, weil sie viele verschiedene Arten von Ereignissen überwachen kann. Andere bevorzugen ELMAH aufgrund der integrierten Funktionen für die Fehlerprotokollanzeige und der Unterstützung für ASP.NET 1.x-Anwendungen. Letzten Endes macht es keinen Unterschied, welche Plattform Sie für das Protokollieren von Fehlern wählen. Wichtig ist jedoch, dass Ihnen ein strenges System zur Fehlerprotokollierung zur Verfügung steht, um jedes einzelne Detail der unvermeidlichen Anwendungsfehler aufzeichnen zu können.
Preis: Kostenlos.
Fehlerprotokoll in ELMAH  (Klicken Sie zum Vergrößern auf das Bild)

Wichtige Blogs
In einem Gespräch mit einem Kollegen erwähnte ich kürzlich einen Beitrag im Blog „Coding Horror“ von Jeff Atwood. Mein Kollege kannte diesen Blog nicht und fragte mich, worum es da ginge. Ich konnte keine bessere Antwort geben als zu sagen, dass es darin um „Computer und Programmieren und so weiter“ geht.
Es ist schwierig, „Coding Horror“ zu beschreiben, da dieser Blog eine sehr vielfältige Reihe von Themen behandelt. Dazu gehören sehr technische Beiträge (meist zu ASP.NET und webbezogenen Technologien) sowie Vorschläge, wie Sie ein besserer Programmierer werden und bessere Entscheidungen beim Projektmanagement treffen können. Andere Beiträge evaluieren Computerhardware, indem verschiedene Marken von Hauptplatinen, Mäusen oder Monitoren verglichen werden. Es gibt Beiträge zur Benutzerfreundlichkeit und zu Entwurfsfehlern in Verbraucherprodukten sowie interessante Artikel, wie z. B. zu Sport und Ernährung für Computerfreaks, zur Zukunft von Blogs, zum Problem mit EULAs und zur Entstehungsgeschichte von DONKEY.BAS.
Jeff Atwood zeigt den Lesern den Kern einiger wichtiger Branchenprobleme. Informieren Sie sich über seine Ansichten zum Stand der Hochschulbildung für Studierende im Bereich Software. Wie Jeff Atwood darlegt, können Sie die Theorie der Turing-Computer studieren oder lernen, wo Sie in Visual Studio® klicken müssen, oder Sie können sich mit etwas im Bereich dazwischen befassen. Was ist also der beste Ansatz, wenn Sie planen, Software zu erstellen? Die Antwort werden Sie hier nicht finden. Dazu müssen Sie den Blog von Jeff Atwood lesen.
Der Blog ist sehr beliebt (mehr als 75.000 Leser haben seinen RSS-Feed abonniert). Es gibt also jede Menge Kommentare. Hinzu kommt, dass Jeff Atwood viele Links zu anderen bekannten Bloggern bietet, damit Sie wirklich einen guten Querschnitt der Meinungen erhalten. Der einzige Nachteil ist der Mangel an Tools zum Erforschen dieses reichhaltigen Inhalts. Es ist ein Suchfeld vorhanden, aber keine Unterteilung der Beiträge in Kategorien.
Blog „Coding Horror“ von Jeff Atwood  (Klicken Sie zum Vergrößern auf das Bild)

Das Bücherregal
Eine der wichtigsten Neuerungen im Microsoft® .NET Framework 3.5 ist LINQ. Kurz gesagt, LINQ ermöglicht Entwicklern, C#- und Visual Basic-Code zu schreiben, der stark der Syntax von T-SQL ähnelt, mit dem aber trotzdem unterstützte Datenquellen direkt abgefragt werden können, einschließlich Enumerable-Sammlungen, XML-Dokumenten und SQL Server-Datenbanken. Zum Beispiel gibt der folgende C#-Code die geraden Zahlen im hier definierten Bereich an:
int[] numbers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var evens = from p in numbers
            where p % 2 == 0
            select p;

foreach (var e in evens)
    Console.WriteLine(e);
Aufgrund der neuen Sprachsyntax, der Vielfalt der LINQ-Features und der Komplexität von LINQ habe ich es immer vorgezogen, LINQ mithilfe von Büchern zu erlernen, statt nach Onlineartikeln und Lernprogrammen zu suchen. Das erste LINQ-Buch, das ich las, war „Pro LINQ: Language Integrated Query in C# 2008“ von Joseph C. Rattz Jr.
Dieses Buch fängt mit einer schnellen und fesselnden Einführung in LINQ an und zeigt, wie damit Sammlungen, XML-Dateien und SQL Server-Datenbanken abgefragt werden können. Darauf folgt eine kurze Erläuterung der neuen Sprachfeatures, die LINQ möglich gemacht haben: Lambda-Ausdrücke, anonyme Typen, Objektinitialisierer, Erweiterungsmethoden, automatische Eigenschaften und so weiter.
Der Hauptteil des Buchs ist in vier Abschnitte unterteilt, in denen LINQ to Objects, LINQ to XML, LINQ to DataSets und LINQ to SQL behandelt werden. Jeder Abschnitt enthält eine ausführliche Untersuchung der LINQ-Syntax und der verschiedenen Klassen und Methoden, die LINQ das Abfragen dieser verschiedenen Datenspeicher ermöglichen. Der Abschnitt zu LINQ to Objects dient als technische Referenz zu den Standardabfrageoperatoren. Diese Operatoren werden aufgezählt, kurz beschrieben und anhand eines Programmierbeispiels veranschaulicht. Die darauffolgenden Abschnitte bieten eine ausführliche Besprechung von LINQ, einschließlich hilfreicher Tipps, häufiger Probleme und detaillierter, praktischer Beispiele.
Der letzte Abschnitt, LINQ to SQL, ist für die Mehrzahl der Entwickler wahrscheinlich das interessanteste und nützlichste Kapitel. So ist es nicht verwunderlich, dass ein Drittel des Buchs LINQ to SQL gewidmet ist und Schritt-für-Schritt-Anweisungen zum Erstellen der zugrunde liegenden SQL-Entitätsklassen mithilfe des objektrelationalen Designers und des Befehlszeilentools „SQLMetal.exe“ enthält. Der Autor bietet auch Beispiele zum Verwenden dieser Klassen zusammen mit der DataContext-Klasse, um Daten abzufragen, zu aktualisieren, einzufügen und zu löschen. Das ist aber noch nicht alles: Sie finden auch Kapitel, die komplexere Datenbankprobleme wie die Gleichzeitigkeitssteuerung und Transaktionen behandeln.
Preis: $44.99.
  

Senden Sie Fragen und Kommentare für Scott Mitchell in englischer Sprache an toolsmm@microsoft.com.


Scott Mitchell, Autor zahlreicher Bücher und Gründer von 4GuysFromRolla.com, arbeitet als MVP seit 1998 mit Microsoft-Webtechnologien. Scott Mitchell ist unabhängiger Berater, Schulungsleiter und Schriftsteller. Sie erreichen ihn unter Mitchell@4guysfromrolla.com oder über seinen Blog unter ScottOnWriting.NET.

Page view tracker