我对 per4j 不太了解,因为我是新手,我正在尝试将 perf4j 计时添加到我的 maven 项目中。我通过查看一些示例创建了项目设置。
这是我的log4j.xml
文件
<?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="C:/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="C:/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="C:/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>
这是我的 aom.xml 文件
<!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>
当我使用运行示例主类时,StopWatch
我正在获取带有计时详细信息的日志文件,但是当我使用@Profiled
注释时,它无法创建计时器日志。它正在创建新的日志文件,但该文件将为空。
我的示例类如下所示:
import org.apache.log4j.Logger;
import org.perf4j.StopWatch;
import org.perf4j.aop.Profiled;
import org.perf4j.log4j.Log4JStopWatch;
public class Sampletest {
private final static Logger logger = Logger.getLogger(Sampletest.class);
@Profiled(tag= "email", logFailuresSeparately=false)
public void email(){
// StopWatch stopWatch = new Log4JStopWatch("email");
try {
Thread.sleep((long)(Math.random() * 1000L));
} catch (InterruptedException e) {
e.printStackTrace();
}
logger.info("email");
// stopWatch.stop();
}
@Profiled(tag = "phone")
private void phone(){
//StopWatch stopWatch = new Log4JStopWatch("phone");
try {
Thread.sleep((long)(Math.random() * 2000L));
} catch (InterruptedException e) {
e.printStackTrace();
}
logger.info("phone");
//stopWatch.stop();
}
public static void main(String[] args) {
logger.info("Welcome to Perf4j");
Sampletest obj = new Sampletest();
obj.email();
obj.phone();
}
}
谁能告诉我我在使用注释时做错了什么@Profiled
,当我使用时一切都很顺利StopWatch
。