2012-10-04 70 views
13

Ahora 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í cuando se depura.¿Cómo registrar automáticamente la entrada/salida de métodos en Java?

I tienen esta pieza de código en el comienzo 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 (introducida).

Me preguntaba si hay una forma de hacerlo automáticamente sin tener que incluir este código en todos los métodos.

Respuesta

10

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

Por ejemplo, utilizando el AspectJ compilador (que puede ser integrado en Eclipse, Emacs y otros entornos de desarrollo), puede crear una pieza de código como éste:

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 añade un código de registro después de y antes de la ejecución de todos los métodos en la clase "Punto".

+0

¿Funciona en aplicaciones fuera de línea? ¿Cuáles no se están ejecutando en un servidor? –

+0

@ArturasM sí, el bytecode AspectJ está entretejido en las clases de destino, por lo que se ejecuta directamente en la JVM. Entonces, cualquier JVM que cumpla con la especificación de Java puede ejecutarlo. – Keith

1

Usted debe mirar Aspect Oriented Programming, en particular el de puntos de inflexión around() que sería útil para registrar la entrada y salida de los métodos que le gustaría para calificar en la definición.

4

Como ya se ha sugerido, utilizar AOP con @Loggable anotación 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 comprende estas anotaciones y registra automáticamente las llamadas a métodos, sus argumentos, y tiempo de ejecución a través de SLF4J.

Además, verifique esta entrada del blog que explica los detalles: http://www.yegor256.com/2014/06/01/aop-aspectj-java-method-logging.html

Cuestiones relacionadas