首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在intellij中启用perf4j概要注释

在intellij中启用perf4j概要注释
EN

Stack Overflow用户
提问于 2017-04-12 19:02:54
回答 1查看 330关注 0票数 0

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

以下是配置的相关摘录:

logback.xml

代码语言:javascript
复制
<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

代码语言:javascript
复制
<?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文件夹中手动创建的main文件夹下包含了aop.xml,但我不确定AspectJ是否检测到了这一点。

提前感谢

更新

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

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

更新

澄清:

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-14 10:00:58

好的,我向GitHub回购添加了一个完整的Maven示例,您只需克隆和播放即可。

一些需要考虑的基本问题:

  • 对于编译时编织(CTW),在编译和运行代码时,需要在类路径上使用aspectjrt.jar。您还需要使用AspectJ编译器来构建项目,一个普通的Java编译器是不够的。
  • 对于加载时织入(LTW),在运行代码:aspectjweaver.jar ( -javaagent:/path/to/aspectjweaver.jar )时,需要将-javaagent:/path/to/aspectjweaver.jar作为命令行上的Java代理。您还需要将它作为VM参数添加到IDEA中的LTW运行配置中。
  • 对于LTW,您还需要资源文件夹中的META-INF/aop.xml。还请注意,为了包含子包,您应该使用..*表示法,而不仅仅是.*,例如<include within="de.scrum_master..*"/>

您可以在我的项目的read-me文件中找到更多信息。

P.S.:Perf4J文档已经过时,项目没有维护。因此,它仍然将AspectJ 1.6.x作为必要的依赖项。我用最新的AspectJ 1.8.10构建并运行了所有东西,它运行得很好,无论是Maven还是IDEA。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43377648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档