Как автоматически регистрировать вход / выход методов в Java?
Щас пользуюсь java.util.logging
войти точки входа и выхода каждого метода в моем проекте Java. Это очень полезно для меня при отладке.
У меня есть этот кусок кода в начале каждого метода и аналогичный в конце:
if (logger.isLoggable(Level.FINER)) {
logger.entering(this.getClass().getName(), "methodName");
}
Где "methodName" - это имя метода (жестко закодировано).
Поэтому мне было интересно, есть ли способ сделать это автоматически без необходимости включать этот код в каждый метод.
5 ответов
Я предлагаю использовать Аспектно-ориентированное программирование.
Например, используя компилятор AspectJ (который может быть интегрирован в Eclipse, Emacs и другие IDE), вы можете создать фрагмент кода, подобный следующему:
aspect AspectExample {
before() : execution(* Point.*(..))
{
logger.entering(thisJoinPointStaticPart.getSignature().getName(), thisJoinPointStaticPart.getSignature().getDeclaringType() );
}
after() : execution(* Point.*(..))
{
logger.exiting(thisJoinPointStaticPart.getSignature().getName() , thisJoinPointStaticPart.getSignature().getDeclaringType() );
}
}
Этот аспект добавляет код регистрации после и перед выполнением всех методов в классе "Point".
Вы должны взглянуть на Аспектно-ориентированное программирование. Я бы предложил Spring AOP или AspectJ как то, на что вам следует обратить внимание.
Кроме того, вот краткое руководство, которое поможет вам начать работу с регистрацией в Spring AOP
Как уже предлагалось, используйте АОП с @Loggable
аннотация от jcabi-аспектов (я разработчик):
@Loggable(Loggable.DEBUG)
public String load(URL url) {
return url.openConnection().getContent();
}
Библиотека также содержит аспект AOP, который понимает эти аннотации и автоматически регистрирует вызовы методов, их аргументы и время выполнения через SLF4J.
Кроме того, проверьте этот пост в блоге, который объясняет детали: http://www.yegor256.com/2014/06/01/aop-aspectj-java-method-logging.html
Вы пытались посмотреть на slf4j? Он имеет LocationAwareLogger, который может автоматически собирать имя метода.
Вы должны взглянуть на Аспектно-ориентированное программирование, особенно на around()
точка соединения, которая будет полезна для регистрации входа и выхода из методов, которые вы хотели бы квалифицировать в определении.