2010-01-15 13 views
28

Ich lese zurzeit über Spring und eines der Beispiele für eine Verwendung von AOP protokolliert den Beginn und das Ende von Methodenaufrufen.Verwendet Spring AOP für die Protokollierung eine gute Idee?

Ich habe auch gelesen, dass die Verwendung von AOP die Leistung beeinträchtigen kann.

Ist die Verwendung von Spring AOP eine gute Idee für diese Art der Protokollierung? Mein Verständnis ist, dass Spring Dynamic AOP verwendet, wäre es besser, statische AOP (wie AspectJ) für diese Art von AOP zu verwenden.

Natürlich erfordert die Kodierungspolitik des Unternehmens, für das ich arbeite, eine lächerliche Menge an Protokollierung und ich möchte die Menge an Protokollierungscode reduzieren, die ich schreiben muss, und die Lesbarkeit meines Codes verbessern.

Banne ich den falschen Baum an?

Antwort

13

Lesen Sie this blog-post über Ihre Leistungsbedenken.

Die Art, an AOP zu denken, ist, die bereitgestellten funktionalen Vorteile an erster Stelle zu stellen. Wenn automatisiertes Logging Ihre Anforderung ist und AOP darauf passt, sollten Sie es tun.

Das Laden-Zeit-Weben wird natürlich bevorzugt, wenn eine feinkörnige Protokollierung erforderlich ist.

32

I Frühling AOP für die Umsetzung Protokollierung verwendet, um meine Beobachtungen teilen I:

  • Auswirkungen auf die Leistung nicht ausreichend ist, ist es weniger als Auswirkung der Protokollierung selbst
  • Aspekte konfiguriert im Frühjahr Konfiguration, Sie in der Lage sind Logging-Code bei Bedarf vollständig deaktivieren
  • Debugging wird problematischer, da Stack-Traces eher länger werden
  • Eine solche Entscheidung beeinflusst das Design ausreichend. Es gibt nicht nur eine Reihe von Schnittstellen und Aspektklassen, sondern auch Ihre Produktionsklassen müssen sehr "dünn" sein. Vergessen Sie nicht, dass Sie Anrufe zu nichtöffentlichen Methoden nicht abfangen können. Self-Calls (auch zu öffentlichen Methoden) können ebenfalls nicht abgefangen werden (wie Sie mit nacktem this handle statt Handle von AOP umwickelt) und daher nicht protokolliert werden können. Die Protokollierung kann also nur an Schnittstellengrenzen erfolgen. (Dies betrifft die Verwendung von Proxy-basiertem Aspektweben, es gibt eine Option zur Laufzeitunterklassenbildung mit cglib, aber ich habe sie nicht verwendet)
  • Das Schreiben von Pointcuts kann sehr schwierig sein. IntelliJ Idea hilft sehr, zu entscheiden, welche Methoden von Pointcut empfohlen werden.
  • Im Allgemeinen mochte ich diesen Ansatz und denke, dass es wert ist, verwendet wird, aber es schien sehr viel komplizierter, als ich
  • erwartet
3

ich es in this blog post beschrieben ähnlich wie die Art und Weise tat. Es ist das Beste, was ich gefunden habe und es hat auch eine sample, die schön den Unterschied zwischen der Verwendung und nicht mit AOP zeigt.

Imho ist es nicht wert, es sei denn, Sie tun etwas schicker dann Logging, wie Fehler-Management mit Persistenz. Wenn Sie eine gute Ausnahmehierarchie (Domäne, System) und ordnungsgemäß festgelegte Protokollgrenzen haben, reduzieren Sie nicht viel Protokollierungscode.

+0

Der Link ist auf die Blog-Website und nicht das eigentliche Blog für das betreffende Thema –

Verwandte Themen