Perf4J @ Профильная аннотация + log4j не работает

У меня возникла следующая проблема: я хочу отслеживать время выполнения некоторых низкоэффективных методов с помощью аннотации perf4j @Profiled и log4j. Проблема в том, что файл журнала мониторинга пуст и выглядит так:

Performance Statistics   2013-07-17 18:07:50 - 2013-07-17 18:08:00
Tag                                                  Avg(ms)         Min         Max     Std Dev       Count

Performance Statistics   2013-07-17 18:08:00 - 2013-07-17 18:08:10
Tag                                                  Avg(ms)         Min         Max     Std Dev       Count

Файл log4j.xml содержится в каталоге projectRoot/conf/exp и выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n"/>
</layout>
</appender>

<appender name="logfile" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="./logs/exp-log.txt"/>
<param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
<layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%p %d{HH:mm:ss.SSS}    %c          %m%n"/>
</layout>
</appender>

<appender name="CoalescingStatistics"
          class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">

    <param name="TimeSlice" value="10000"/>
    <appender-ref ref="fileAppender"/>

    <appender-ref ref="graphExecutionTimes"/>
    <appender-ref ref="graphExecutionTPS"/>
</appender>

<appender name="fileAppender" class="org.apache.log4j.FileAppender">
    <param name="File" value="./logs/perfStats.log"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%m%n"/>
    </layout>
</appender>

<appender name="graphExecutionTimes"
          class="org.perf4j.log4j.GraphingStatisticsAppender">
    <!-- Possible GraphTypes are Mean, Min, Max, StdDev, Count and TPS -->
    <param name="GraphType" value="Mean"/>
    <!-- The tags of the timed execution blocks to graph are specified here -->
    <param name="TagNamesToGraph" value="firstBlock,secondBlock"/>
    <appender-ref ref="graphsFileAppender"/>
</appender>

<appender name="graphExecutionTPS"
          class="org.perf4j.log4j.GraphingStatisticsAppender">
    <param name="GraphType" value="TPS"/>
    <param name="TagNamesToGraph" value="firstBlock,secondBlock"/>
    <appender-ref ref="graphsFileAppender"/>
</appender>

<appender name="graphsFileAppender" class="org.apache.log4j.FileAppender">
    <param name="File" value="./logs/perfGraphs.log"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%m%n"/>
    </layout>
</appender>

<logger name="org.perf4j.TimingLogger" additivity="false">
    <level value="INFO"/>
    <appender-ref ref="CoalescingStatistics"/>
</logger>

<logger name="sui">
<level value="debug"/>
</logger>

<root>
    <priority value="debug"/>
    <appender-ref ref="logfile"/>
    <appender-ref ref="stdout"/>
</root>
</log4j:configuration>

У меня есть следующие аннотации в моих источниках:

@Profiled(tag = "exportRecsForAccount")
    protected void exportRecsForAccount(NetSuiteAcctInfo acctInfo) {

@Profiled(tag = "exportRecsForEachAccount")
    protected boolean exportRecsForEachAccount() throws QueueManagerException, CriticalDBConnectionFailed {

Кроме того, у меня есть файл aop.xml, расположенный в projectRoot/recources/META-INF. Его содержание следующее:

<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">

<aspectj>
    <aspects>
        <aspect name="org.perf4j.log4j.aop.TimingAspect"/>
    </aspects>

    <weaver options="-verbose -showWeaveInfo">
        <include within="comp.sui.ExportService"/>
    </weaver>
</aspectj>

где comp.sui.ExportService - это ссылка на класс исходного кода.

Так что вопрос в том, что я делаю не так? Когда я использую штампы StopWatches, все в порядке, но с аннотациями @Profiled кажется, что ничего не работает.

1 ответ

Пытаться:

<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">

<aspectj>
    <aspects>
        <aspect name="org.perf4j.log4j.aop.TimingAspect"/>
    </aspects>

    <weaver options="-verbose -showWeaveInfo">
        <include within="comp.sui.ExportService"/>

        <!-- Weave in perf4j aspects for Aspectj 1.6.7+ -->
        <include within="org.perf4j.slf4j.aop.*"/>
        <include within="org.perf4j.aop.*"/>
    </weaver>

</aspectj>
Другие вопросы по тегам