Java 带有@Loggable注释的方法从不打印方面日志

Java 带有@Loggable注释的方法从不打印方面日志,java,spring,logging,aspectj,jcabi,Java,Spring,Logging,Aspectj,Jcabi,我想实现记录一些方法的进入和退出的功能,这些方法用一些注释进行了注释(例如:@Loggable)。我遇到了AspectJ AOP,我们可以使用它来实现这一点 我实现了自己的一个自定义方面,以自定义在使用@Loggable调用的方法进入和退出时要打印的日志消息: @Aspect public final class MethodLogger { private static final Logger LOG = LoggerFactory.getLogger(MethodLogger.cla

我想实现记录一些方法的进入和退出的功能,这些方法用一些注释进行了注释(例如:
@Loggable
)。我遇到了AspectJ AOP,我们可以使用它来实现这一点

我实现了自己的一个自定义方面,以自定义在使用
@Loggable
调用的方法进入和退出时要打印的日志消息:

@Aspect
public final class MethodLogger {

  private static final Logger LOG = LoggerFactory.getLogger(MethodLogger.class);

  @Around("execution(* *(..)) && @annotation(Loggable)")
  public Object around(ProceedingJoinPoint point) throws Throwable {

    String className = MethodSignature.class.cast(point.getSignature()).getClass().getName();
    String methodName = MethodSignature.class.cast(point.getSignature()).getMethod().getName();
    LOG.info(
        "Entering method:{}() of class:{} with parameters: {}",
        methodName,
        className,
        Arrays.toString(point.getArgs()));

    try
    {
      return point.proceed();
    }
    catch(Throwable e){
       throw e;
    }
    finally
    {
      LOG.info(
          "Exiting method:{}() of class:{} with parameters: {}",
          methodName,
          className,
          Arrays.toString(point.getArgs()));
    }

  }
}
@Component
public class LoginPage extends BasePage {

@Loggable
public Object login(String username, String password) {

}

}
pom.xml依赖项:

<dependency>
      <groupId>com.jcabi</groupId>
      <artifactId>jcabi-aspects</artifactId>
      <version>0.22.5</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.9.1</version>
    </dependency>
问题

当此实例方法(
login()
)主要以以下方式调用时:
loginPage.login()
,我看不到正在打印到日志输出的入口和出口日志

请注意:

  • 我使用Spring依赖注入来初始化带有
    @Component
    注释的类,不确定这对论坛是否有用,但仍然让大家知道
  • 这是一个测试自动化项目,我将从JUnit+Cucumber runner类触发一些UI自动化测试
  • 我不会从maven那里触发我的测试

有人能告诉我这里可能出了什么问题吗?

您认为
方法记录器
尚未初始化。请尝试将
@组件
添加到
方法记录器
。这应该将方面加载并注册到上下文中,使其可以使用

此外,您可能希望简化切入点
@round(“执行(**(..)&&&&@注释(可记录)”)


执行(**(..)
基本上是一张通配符,因此毫无用处。只需使用
@Around(“@annotation(Loggable)”)

您尝试过注释的完整路径吗?我还没有创建单独的注释。我使用的是AspectJ的@Loggable注释。您使用的是哪种编织?如果您使用的是编译时编织,请检查方面是否成功地编织到.class文件中。我不确定当您不是从maven运行代码,而是直接从IDE运行类(在我的例子中是测试运行程序类)时,aspectj编织应该如何发生。我正在使用IntelliJPost测试代码和配置。您如何配置此方面?