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.
¿Has tratado de mirar slf4j ? Tiene LocationAwareLogger que puede recopilar automáticamente el nombre del 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.
Debes mirar la programación orientada a Aspectos . Yo sugeriría Spring AOP o AspectJ como algo que debería mirar.
Además, aquí hay un tutorial rápido para ayudarlo a comenzar con el registro con Spring AOP
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".