2012-10-04 8 views
13

Momentan verwende ich java.util.logging, um die Eingangs- und Ausgangspunkte jeder Methode in meinem Java-Projekt zu protokollieren. Dies ist sehr nützlich für mich beim Debuggen.Wie protokolliert man automatisch den Eingang/Ausgang von Methoden in Java?

Ich habe dieses Stück Code am Anfang jeder Methode und ein ähnliches am Ende:

if (logger.isLoggable(Level.FINER)) { 
    logger.entering(this.getClass().getName(), "methodName"); 
} 

Wo „Methodenname“ ist der Name der Methode (einprogrammiert).

Also ich frage mich, ob es eine Möglichkeit gibt, dies automatisch zu tun, ohne diesen Code in jeder Methode enthalten zu müssen.

Antwort

10

Ich empfehle die Verwendung von Aspect Oriented Programming.

Zum Beispiel mit dem AspectJ Compiler (die integriert werden können, Eclipse, Emacs und anderen IDEs), können Sie ein Stück Code wie diese erstellen:

aspect AspectExample { 
    before() : execution(* Point.*(..)) 
    { 
     logger.entering(thisJoinPointStaticPart.getSignature().getName(), thisJoinPointStaticPart.getSignature().getDeclaringType() ); 

    } 

    after() : execution(* Point.*(..)) 
    { 
     logger.exiting(thisJoinPointStaticPart.getSignature().getName() , thisJoinPointStaticPart.getSignature().getDeclaringType() ); 

    } 
} 

Dieser Aspekt fügt eine Logging-Code nach und vor der Ausführung aller Methoden in der Klasse "Point".

+0

Funktioniert es in Offline-Anwendungen? Welche laufen nicht auf einem Server? –

+0

@ArturasM Ja, der AspectJ Bytecode ist in die Zielklassen eingewoben, so dass dies direkt in der JVM ausgeführt wird. Jede JVM, die der Java-Spezifikation entspricht, kann sie ausführen. – Keith

12

Sie sollten sich Aspect oriented programming ansehen. Ich würde vorschlagen, Spring AOP oder AspectJ als etwas, das Sie betrachten sollten.

Auch hier ist eine kurze Anleitung Sie mit Logging with Spring AOP

+0

Aber ich Anwendungen nicht denken Frühling arbeitet im offline, die auf dem Server ausgeführt werden, nicht, nicht wahr? Und was ist mit AspectJ? –

1

Sie sollten bei Aspect Oriented Programming, insbesondere die around() joinpoint suchen den ersten Schritten zu helfen, die nützlich sein würde, den Eintritt und Austritt von Methoden zu protokollieren, die Sie qualifizieren möchten die Definition.

4

Wie bereits angedeutet, verwenden AOP mit @Loggable Anmerkung aus jcabi-aspects (Ich bin ein Entwickler):

@Loggable(Loggable.DEBUG) 
public String load(URL url) { 
    return url.openConnection().getContent(); 
} 

Die Bibliothek auch ein AOP Aspekt enthält, die diese Anmerkungen versteht und protokolliert automatisch Methodenaufrufe, ihre Argumente, und Ausführungszeit durch SLF4J.

Überprüfen Sie auch dieses Blog-Post, die die Details erklärt: http://www.yegor256.com/2014/06/01/aop-aspectj-java-method-logging.html