Telemetrie für Apps mit Appication Insights (3) und Aspektorientierter Programmierung (optional)

Lasst Euch nicht verwirren – was folgt ist optional! Wenn Ihr bereits Teil 1 & 2 gelesen habt, dann ist der folgende Teil für Euch vielleicht relevant, aber nicht zwingend notwendig!

Application Insights über Aspektorientierte Programmierung verwirklichen (AOP)

Vielleicht kommt man auf die Idee, das Logging für mehrere oder alle Methoden im C# Code zu machen. Dann kann man entweder in jeder öffentlichen Methode die im vorherigen Teil beschriebene Zeile Code hinzufügen oder man sucht nach etwas eleganteren Lösungen. Das Tracen und Loggen ist ja im Prinzip ein klassisches Standartbeispiel, wenn es um aspektorientierte Programmierung (AOP) geht, da es eben nur schwer einer einzelnen Klasse zuzuordnen ist und deswegen einen sogenannten “Cross-Cutting-Concern” darstellt. Durch das Auslagern des “Aspektes” des Loggens hält man den Code sauberer und die Richtlinie der Separation of Concerns ein.

Hier stellen unterschiedliche Anbieter und auch die Open Source Entwicklercommunity leicht zu bedienende Frameworks her, bspw. SheepAspect, Spring oder, wie von mir verwendet, Postsharp. Natürlich muss man kein Framework verwenden, aber es macht das Leben etwas leichter.

So habe ich statt der extra Zeile Programmcode jetzt lediglich ein Attribut über den zu loggenden Methoden stehen und das Framework sorgt dafür, dass das Logging vorgenommen wird, das ich extern konfiguriert habe.

image_thumb[3]

Mein Attribut habe ich folgendermaßen definiert:

image_thumb[6]

Wie Ihr seht bastelt sich in der OnEntry Methode das Programm selbst den Methodenamen zusammen und verwendet diesen zusammen mit dem Categorynamen als Bezeichner für das Eventlogging. Postsharp sorgt dafür, das in jeder Methode, die mit dem Attribut geflaggt ist zunächst mal das Logging gefeuert wird. So habe ich eine zentrale Stelle, über die ich Konfigurationen am Logging vornehmen kann, wenn es denn mal sein muss.

Wie gesagt – das ist optional und ich beschreibe es hier nur, weil es mir in Verbindung mit dem Tracing einfach eingefallen ist. Als nächstes sehen wir uns an, wie man die geloggten Events noch mit etwas mehr Information anreichern kann und wie wir nachsehen können wo und wann die Daten eigentlich übertragen werden.