我试图在intellij中启用perf4j注释,但我正在努力正确配置AspectJ。更具体地说,日志文件是正确创建的,但缺少来自注释方法的任何数据。在intellij中启用perf4j配置文件注释
这些配置的相关摘要:
logback.xml
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="statistics" class="ch.qos.logback.core.FileAppender">
<file>./target/statisticsLogback.log</file>
<append>false</append>
<layout>
<pattern>%msg%n</pattern>
</layout>
</appender>
<appender name="coalescingStatistics" class="org.perf4j.logback.AsyncCoalescingStatisticsAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<timeSlice>1000</timeSlice>
<appender-ref ref="statistics"/>
</appender>
<appender name="listAppender" class="ch.qos.logback.core.read.ListAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<timeSlice>1000</timeSlice>
</appender>
<logger name="org.perf4j.TimingLogger" level="info">
<appender-ref ref="coalescingStatistics" />
<appender-ref ref="listAppender"/>
</logger>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
aop.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<aspectj>
<!--
We only want to weave in the log4j TimingAspect into the @Profiled classes.
Note that Perf4J provides TimingAspects for the most popular Java logging
frameworks and facades: log4j, java.util.logging, Apache Commons Logging
and SLF4J. The TimingAspect you specify here will depend on which logging
framework you wish to use in your code.
-->
<aspects>
<aspect name="org.perf4j.slf4j.aop.TimingAspect"/>
<!-- if SLF4J/logback use org.perf4j.slf4j.aop.TimingAspect instead -->
</aspects>
<weaver options="-verbose -showWeaveInfo">
<!--
Here is where we specify the classes to be woven. You can specify package
names like com.company.project.*
-->
<include within="com.mycode.myproject.mypackage.*"/>
<include within="org.perf4j.slf4j.aop.*"/>
</weaver>
</aspectj>
最后相关的测试方法使用@Profiled注释进行标记,这是aop.xml中定义的包的一部分。
这种构造导致在日志文件中产生(这表明logback.xml配置正确,但是它仅包含从标记方法头部,并且不统计信息。
主要的问题我已经是其中AspectJ的配置应该在的IntelliJ去,我已经包括src文件夹中手动创建的META-INF文件夹下的aop.xml文件,但我不知道这是由AspectJ的所有检测。提前
感谢
UPDATE
我已经在这个一些进展,因为我的初始后,具体地引入两个更改: ⅰ)包括-javaagent:LIB \ aspectjweaver.jar ⅱ)移动的aop.xml中成META-INF文件夹。 aop配置现在正在被选中,因为它记录了配置细节,并且还提到了正在分析的方法。 现在的问题是,正在分析的线程崩溃,它不记录任何异常,但通过调试这个问题似乎与org.aspectj.runtime.reflect.Factory中的ClassNotFoundException有关,当试图实例化org.aspectj.runtime .reflect.JoinPointImpl。
要隔离问题,我删除了所有的aspectJ的maven导入并使用安装包提供的jar,但问题依然存在,而且应用程序崩溃而没有任何日志记录的事实使问题跟踪更加困难。
UPDATE
澄清:
- 阅读更多关于这包括在自由之路链路的手册(对于感谢)后,我发现我被加载时混合向上/编译时做法。从那以后,我尝试了这两种方法,如指南中所述,但具有与之前更新中所述相同的结果。
- 按照上面,我开始
- 构建是通过IDE完成后,按照上面的那一刻我已删除从Maven的AspectJ的/的Perf4依赖关系,并与当地AspectJ织入选项(-javaagent)的应用罐子
- 如上所述aop。作为更新没有错误或警告,该编织的方法
感谢您的配置,但我缺少注释的应用程序代码。我很了解AspectJ,但不是Perf4J。从你的aop.xml中我得出结论,你想使用加载时编织而不是编译时,对吗?那么你是否在命令行中使用AspectJ weaver作为Java代理正确启动JVM?你如何构建你的应用程序?有了Maven,我希望。这比纯粹依赖IDE的版本更好。请回答我的所有问题,并使用示例代码编辑您自己的问题,然后我可以更好地帮助您。 – kriegaex
更新:我很好奇,并创建了一个小的Perf4J Maven项目。它通过AspectJ编译器使用编译时编织,而不是加载时编织。这两种方法都在[开发人员指南](https://web.archive.org/web/20150507044849/http://perf4j.codehaus.org/devguide.html)中描述(仅通过WayBack Machine可用,因为Codehaus已关闭很久以前),但手动安装,而不是Maven。我更喜欢Maven,因为它适用于任何IDE,比如Eclipse,IDEA,也可能是Netbeans(从未尝试过)。它很好地工作,我没有看到为什么LTW不会工作的原因。 – kriegaex
有关LTW的另一个问题:您是否在控制台上看到任何带有“的AspectJ Weaver输出?任何符号文件正在被拿起? –
kriegaex