Intellij idea 在intellij中启用perf4j配置文件注释

Intellij idea 在intellij中启用perf4j配置文件注释,intellij-idea,aspectj,perf4j,Intellij Idea,Aspectj,Perf4j,我试图在intellij中启用perf4j注释,但我很难正确配置AspectJ。更具体地说,日志文件是正确创建的,但缺少来自注释方法的任何数据 以下是配置的相关摘录: logback.xml %d{HH:mm:ss}[%thread]-5级别%logger{36}-%msg%n ./target/statisticsLogback.log 错误的 %消息%n 1000 1000 aop.xml 最后,用@Profiled注释标记相关的测试方法,这是aop.xml中定义的包的一部分 此配

我试图在intellij中启用perf4j注释,但我很难正确配置AspectJ。更具体地说,日志文件是正确创建的,但缺少来自注释方法的任何数据

以下是配置的相关摘录:

logback.xml


%d{HH:mm:ss}[%thread]-5级别%logger{36}-%msg%n
./target/statisticsLogback.log
错误的
%消息%n
1000
1000

aop.xml


最后,用@Profiled注释标记相关的测试方法,这是aop.xml中定义的包的一部分

此配置导致生成日志文件(这表明logback.xml配置正确,但它只包含标题,不包含标记方法的统计信息)

我的主要问题是AspectJ配置应该在Intellij中的什么位置,我已经在src文件夹中手动创建了META-INF文件夹下包含了aop.xml,但我不确定AspectJ是否检测到了这一点

提前谢谢

更新

自从我发表第一篇文章以来,我在这方面取得了一些进展,具体介绍了两个变化: i) 包括-javaagent:lib\aspectjweaver.jar ii)将aop.xml移到META-INF文件夹中。 aop配置现在正在被提取,因为它记录了配置细节,并且还提到了正在分析的方法。 现在的问题是,正在分析的线程崩溃,它不会记录任何异常,但通过调试,该问题似乎与试图实例化org.aspectj.runtime.reflect.Factory时org.aspectj.runtime.reflect.JoinPointImpl中的ClassNotFoundException有关

为了隔离这个问题,我删除了aspectJ的所有maven导入,并使用了安装包提供的JAR,但问题仍然存在,而且应用程序在没有任何日志记录的情况下崩溃这一事实使得问题跟踪更加困难

更新

澄清:

  • 在阅读了更多关于这方面的内容(包括回程链接中的手册)后,我意识到我混淆了加载时/编译时方法。从那时起,我尝试了指南中描述的两种方法,但结果与我之前的更新中描述的相同
  • 如上所述,我确实使用aspectj weaver选项(-javaagent)启动应用程序
  • 构建是通过IDE完成的,如上所述,此时我已经从Maven中删除了aspectj/perf4j依赖项并链接到本地JAR
  • 如前所述,aop.xml确实会像更新中所述那样被拾取,没有错误或警告,只是确认了编织的方法

好的,我已经添加了一个完整的Maven示例,您可以直接克隆和使用它

需要考虑的一些基本事项:

  • 对于编译时编织(CTW),在编译和运行代码时,需要在类路径上设置
    aspectjrt.jar
    。您还需要使用AspectJ编译器来构建项目,普通的Java编译器是不够的
  • 对于加载时编织(LTW),在运行代码时,需要将
    aspectjweaver.jar
    作为命令行上的Java代理:
    -javaagent:/path/to/aspectjweaver.jar
    。您还需要将其作为VM参数添加到IDEA中的LTW运行配置中
  • 对于LTW,您还需要在资源文件夹中找到
    META-INF/aop.xml
    。还请注意,为了包含子包,您应该使用
    .*
    符号,而不仅仅是
    .*
    ,例如
您可以在我的项目的ReadMe文件中找到更多信息


注意:Perf4J文档已过时,项目未维护。因此,它仍然提到AspectJ 1.6.x作为必要的依赖项。我用最新的AspectJ 1.8.10构建并运行了所有东西,它在Maven和IDEA中都运行得很好。

感谢您的配置,但我缺少带注释的应用程序代码。我很了解AspectJ,但不了解Perf4J。根据aop.xml,我得出结论,您希望使用加载时编织而不是编译时编织,对吗?那么,您是否在命令行上将AspectJ weaver作为Java代理正确地启动了JVM?如何构建应用程序?我希望和Maven在一起。这比纯依赖IDE的构建要好。请回答我所有的问题,并用示例代码编辑您自己的问题,这样我可以更好地帮助您。更新:我很好奇,已经创建了一个perf4jmaven小项目。它通过AspectJ编译器使用编译时编织,而不是加载时编织。这两种方法在中都有描述(由于Codehaus很久以前就关闭了,因此只能通过回程机器使用),但是使用手动设置,而不是Maven。我更喜欢Maven,因为它可以在任何IDE中工作,比如Eclipse、IDEA,可能还有Netbeans(从未尝试过)。它工作得很好,我看不出LTW不工作的原因。关于LTW的另一个问题:您在控制台上看到任何带有
的AspectJ weaver输出吗?有没有收到文件的迹象?谢谢你在这方面花时间。我已经用更多的信息和当前状态更新了帖子。请回答我的问题。你的更新没有。谢谢你,这远远超出了我希望在这里找到的任何帮助。我克隆了您的repo,对其进行了测试,然后将其应用到我的项目中,该项目现在可以使用本机perf4j注释:-)还很高兴看到,尽管该库很旧,但它仍然使用最新的AspectJ版本运行。