Ich möchte einer Anwendung, an der ich gerade arbeite, die Protokollierung hinzufügen. Ich habe bereits die Protokollierung hinzugefügt, das ist hier kein Problem.
Was sind aus gestalterischer Sicht in einer objektorientierten Sprache die besten Methoden für die Protokollierung, die OOP und Mustern folgen?
Hinweis: Ich mache dies derzeit in C #, daher sind Beispiele in C # natürlich willkommen. Ich würde auch gerne Beispiele in Java und Ruby sehen.
Edit: Ich benutze log4net. Ich weiß nur nicht, wie ich es am besten anschließen kann.
quelle
Da Sie dies in C # tun, würde ich Ihnen empfehlen, sich NLog und ElMAH anzusehen. Sie können mit NUGET SEHR einfach installiert werden. Ich habe einige Links zu den folgenden hinzugefügt, damit Sie weitere Informationen erhalten.
quelle
Persönlich nehme ich das Protokollierungsframework Ihrer Wahl (in meinem Fall Entlib, weil ich mit .NET arbeite) und schreibe einen AOP-Aspekt für die Protokollierung.
Sie können dann beliebige Methoden / Eigenschaften / Klassen / Namespaces zuweisen und ihnen Protokollierung hinzufügen, ohne die Quelle zu überladen.
quelle
Das System, an dem ich gerade arbeite, verwendet eine ereignisgesteuerte Architektur und Messaging, sodass die meisten Aktionen in unserem System das Ergebnis eines Befehls sind und zu Ereignissen führen (als ausgelöste DTO-Klassen anstelle eines Standarddelegatenereignisses). Wir fügen Ereignishandler hinzu, deren einziger Zweck die Protokollierung ist. Dieses Design hilft uns, uns nicht zu wiederholen und muss auch keinen vorhandenen Code ändern, um Funktionen hinzuzufügen / zu ändern.
Hier ist ein Beispiel für eine solche Protokollierungsklasse, die alle Ereignisse behandelt, die aus einem engen Abschnitt unserer Anwendung protokolliert werden sollen (diejenigen, die sich auf eine bestimmte Inhaltsquelle beziehen, aus der wir importieren).
Ich werde nicht unbedingt sagen, dass dies zweifellos eine bewährte Methode ist, da ich meine Meinung darüber zu ändern scheine, was und wie ich häufig protokolliere - und jedes Mal, wenn ich ein Protokoll zur Diagnose eines Problems verwenden muss, finde ich unweigerlich Möglichkeiten, Verbesserungen am zu vornehmen Informationen, die ich aufzeichne.
Ich werde jedoch sagen, dass das Aufzeichnen der relevanten Informationen (insbesondere in Strg-F / Suche durchsuchbar) der wichtigste Teil ist.
Der zweitwichtigste Teil besteht darin, den Protokollierungscode von Ihrer Hauptlogik zu entfernen - dies kann eine Methode hässlich und lang und sehr schnell verschlungen machen .
quelle
Wie andere gesagt haben, die Verwendung
log4j
oderlog4net
oder ein anderes gut ausgebautes Logging - Framework.Ich mag es nicht, wenn Protokollierungscode der Geschäftslogik im Wege steht. Deshalb benutze ich
Log4PostSharp
. Das heißt, ich kann aspektorientierte Programmierung verwenden , um Methoden wie diese zu kommentieren:Oder jede Methode in einer Baugruppe wie folgt:
quelle
Ich bin nicht sicher, ob ein Framework dies tut, aber aus gestalterischer Sicht würde ich die Informationen modellieren, die in hauptsächlich drei Kategorien protokolliert werden müssen:
Für die ersten beiden Kategorien sollte mein ideales Protokollierungsframework sie als Post-Build-Prozess behandeln und für Entwickler transparent sein. Es wäre schön, Assemblys deklarativ Protokollierung hinzuzufügen, etwa wie folgt:
Für die 3. Kategorie können Programmierer einfach eine oder mehrere dedizierte "Protokollierungs" -Methoden erstellen und die Ablaufverfolgung für die erste Kategorie nutzen. Die Protokollierungsmethoden dienen lediglich dazu, einen Stub-Punkt bereitzustellen, auf den Ablaufverfolgungsregeln angewendet werden können.
quelle