scanner ejemplo java logging methods java.util.logging

ejemplo - ¿Cómo registrar automáticamente la entrada/salida de métodos en Java?



scanner java ejemplo (5)

Ahora mismo estoy usando java.util.logging para registrar los puntos de entrada y salida de cada método en mi proyecto Java. Esto es muy útil para mí al depurar.

Tengo este código al principio de cada método y uno similar al final:

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

Donde "methodName" es el nombre del método (codificado).

Así que me preguntaba si hay una manera de hacer esto automáticamente sin tener que incluir este código en cada método.



Como ya se sugirió, use AOP con la anotación jcabi-aspects de jcabi-aspects (soy un desarrollador):

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

La biblioteca también contiene un aspecto de AOP que entiende estas anotaciones y registra automáticamente las llamadas de método, sus argumentos y el tiempo de ejecución a través de SLF4J.

Además, consulte esta publicación de blog que explica los detalles: http://www.yegor256.com/2014/06/01/aop-aspectj-java-method-logging.html


Debería consultar la Programación Orientada a Aspectos , particularmente el punto de unión around() que sería útil para registrar la entrada y salida de los métodos que le gustaría calificar en la definición.



Sugiero el uso de la Programación Orientada a Aspectos.

Por ejemplo, al utilizar el compilador AspectJ (que se puede integrar en Eclipse, Emacs y otros IDE), puede crear un fragmento de código como este:

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

Este aspecto agrega un código de registro antes y después de la ejecución de todos los métodos en la clase "Punto".