PostSharp & SmartInspect

Dieser Blogeintrag liefert ein paar weiterführende Informationen zu meinem zugehörigen Webcast. Darin thematisiere ich wie sich die Geschäftslogik frei von Infrastructure Code halten lässt. Eine Möglichkeit dazu bietet z.B. aspektorientierte Programmierung. Im .NET Umfeld ist PostSharp sehr gut geeignet. In dem Webcast zeige ich wie wir durch den Einsatz in Verbindung mit einem starken Logging Framework wie SmartInspect Concerns wie Logging, Exception Handling, Performance Measuring und Tracing umsetzen.

Wer gerne den Code hätte, kann mich über die üblichen Kanäle wie Twitter und Xing anschreiben. Die SmartInspect Konfiguration sieht wie folgt aus:

AppName = UAR
Connections = tcp(caption="Hello World")
DefaultLevel = Message
Enabled = True
Level = Message
SessionDefaults.Level = Message
SessionDefaults.Active = True
SessionDefaults.Color = 0x00FF40

Webcast:

PostSharp und SmartInspect zur Reduzierung der Code Vermischung

Aktualisierung vom 11.11.12 um 13.50:

Weil die Frage nach Performance aufkam, noch kurz zwei Infos: Über SkipPostSharp=false in den Build Skripten kann PostSharp deaktiviert werden. Außerdem hat Daniel Marbach eine Analyse mit 125000 Codezeilen gemacht und der CompileTime Ovewrhead lag bei lediglich einer Sekunde.

Mit Tag(s) versehen: , , ,

5 thoughts on “PostSharp & SmartInspect

  1. dennistraub 11. November 2012 um 8:56 Reply

    Ich hatte PostSharp vor einigen Jahren eingesetzt, was aber dazu führte, dass das Compilieren immer langsamer wurde. Irgendwann war es so schwerfällig, dass es immer eine gefühlte Ewigkeit dauerte, bis die Unit-Tests gelaufen sind. Ich hab mir gesagt, dass ich lieber auf PostSharp verzichte, als auf schnelllaufende Tests.

    Allerdings ist das, wie gesagt, schon ein paar Jahre her und in Sachen Performance hat sich sicher einiges getan.

    Gefällt mir

  2. Daniel Marbach (@danielmarbach) 11. November 2012 um 10:14 Reply

    Hoi dennis
    PostSharp hat leider zu unrecht immer noch diesen Ruf! Ich habe versuchsweise in einer Solution mit ca. 125000 Zeilen Code jeden Member intercepted und der CompileTime Overhead war knappe 1 Sekunde.

    @Uli
    Findest ist SmartInspect wirklich das Geld wert? Bis jetzt kam ich mit Nlog oder Log4net immer sehr weit…

    Gruss dani

    Gefällt mir

  3. Uli Armbruster 11. November 2012 um 13:24 Reply

    @Dennis: Du kannst dir ja unterschiedliche Build Skripte bauen, bei denen du SkipPostSharp=false oder SkipPostSharp=true setzt. So machen wir das.

    @Daniel: Oh, gut zu wissen. Das schreibe ich gleich mal in den Beitrag rein!

    @Daniel: Das kommt darauf an, was du alles loggen willst. Wenn du z.B. ganze Arrays, DataSets, Bilder, SQL, etc. loggen willst oder viel mit Threading machst, dann ja. Vor allem ist halt der Viewer gleich noch mit dabei und relativ mächtig. Da portable, kannst du den beim Setup mit ausrollen und hast ihn dann gleich auf dem Client, zum debuggen. Persönlich stört mich halt ungemein, dass er anscheinend nicht mehr weiterentwickelt wird. Primär vermisse ich ein NuGet Package, einen fertigen Email Logger und die Möglichkeit ganze Objekthierarchien anzuzeigen. Wenn ich beispielsweise das Objekt X mit intern verschachtelten Objekten Y logge, dann sehe ich nicht die Inhalte von Y…

    Gefällt mir

  4. Daniel Marbach (@danielmarbach) 11. November 2012 um 16:44 Reply

    Danke Ueli für dein Feedback zu SmartInspect. Als Logviewer habe ich jeweils Log4View verwendet. Der ist recht gut und man kann beliebige Patterns matchen und Profile erzeugen und ist sehr kostengünstig. Ich bin ein grosser Fn von semantischem Loggen. Das heisst nur gezielt an wenigen Stellen im Code dafür aber die Logaufrufe mit Extensionmethoden richtig bezeichnen und gute Informationen liegrn. Ausnahmen sind Systemgrenzen. An diesen setze ich jeweils Tools wie PostSharp oder DynamicProxy ein und logge alles.

    Gruss dani

    Gefällt mir

  5. Uli Armbruster 11. November 2012 um 19:05 Reply

    Hast du mal ein kleines Code Sample dafür wie du vorgehst?

    Gefällt mir

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: