Я пытаюсь включить аннотации perf4j в intellij, но я изо всех сил пытаюсь правильно настроить AspectJ. В частности, файл журнала создается правильно, но в нем отсутствуют какие-либо данные из аннотированного метода.
Это соответствующие выдержки из конфигурации:
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. Я включил aop.xml в созданную вручную папку META-INF в папке src, но я не уверен, что AspectJ вообще обнаруживает это.
заранее спасибо
ОБНОВЛЕНИЕ
Я добился некоторого прогресса в этом со времени моего первоначального поста, в частности, внес два изменения: i) включил -javaagent:lib\aspectjweaver.jar ii) переместил aop.xml в папку META-INF. Конфигурация aop теперь подбирается, поскольку она регистрирует детали конфигурации, а также упоминает профилируемый метод. Теперь проблема заключается в том, что профилируемый поток дает сбой, он не регистрирует никаких исключений, но с помощью отладки проблема, похоже, связана с ClassNotFoundException в org.aspectj.runtime.reflect.Factory при попытке создать экземпляр org.aspectj.runtime. отражение.JoinPointImpl.
Чтобы изолировать проблему, я удалил весь импорт из maven из aspectJ и использовал файлы jar, предоставленные установочным пакетом, но проблема не устранена, а также тот факт, что приложение аварийно завершает работу без ведения журнала, что затрудняет отслеживание проблемы.
ОБНОВЛЕНИЕ
Чтобы уточнить:
- Прочитав больше об этом, включая руководство по обратной ссылке (спасибо за это), я понял, что смешиваю подход времени загрузки/времени компиляции. С тех пор я попробовал оба метода, как описано в руководстве, но с теми же результатами, что и в моем предыдущем обновлении.
- Как указано выше, я запускаю приложение с параметром Avenuej Weaver (-javaagent).
- Сборка выполняется через IDE, как указано выше, на данный момент я удалил зависимости aspectj/perf4j от Maven и связал их с локальными jar-файлами.
- Как уже упоминалось, aop.xml действительно загружается, как указано в обновлении, без ошибок или предупреждений, просто подтверждение тканого метода.
<weaver options="-verbose -showWeaveInfo">
? Есть ли признаки того, что файл вообще загружается? - person kriegaex   schedule 13.04.2017