Him*_*dar 7 spring log4j seam spring-aop perf4j
我已经通过perf4J网站的以下链接,并做了同样的事情:http://perf4j.codehaus.org/devguide.html#Using_Spring_AOP_to_Integrate_Timing_Aspects
在我的spring.xml中添加了以下内容.
<aop:aspectj-autoproxy/>
<bean id="timingAspect" class="org.perf4j.log4j.aop.TimingAspect"/>
<bean id="wscClientBase" class="com.xyz.csa.core.common.WscClientBase"/>
Run Code Online (Sandbox Code Playgroud)
在类WscClientBase中,我使用@Profiled注释的以下方法.
@Profiled(tag = "SOAPCALLTEST")
public Object sendMessage(Object message) {
String msg = message.toString();
if (msg.indexOf(' ') > 1) {
msg = msg.substring(1, msg.indexOf(' '));
}
try {
Object ret = marshalSendAndReceive(message);
return ret;
} catch (RuntimeException ex) {
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud)
我没有在应用程序日志中看到perf4j TimingLogger语句.但是,如果我使用它(如下没有注释),我会成功地看到日志语句.
public Object sendMessage(Object message) {
String msg = message.toString();
if (msg.indexOf(' ') > 1) {
msg = msg.substring(1, msg.indexOf(' '));
}
StopWatch stopWatch = new Slf4JStopWatch();
try {
Object ret = marshalSendAndReceive(message);
stopWatch.stop("PERF_SUCCESS_TAG", msg);
return ret;
} catch (RuntimeException ex) {
stopWatch.stop("PERF_FAILURE_TAG", msg);
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
小智 9
Perf4j 这是一个用于应用程序的性能分析和检查插件.它可以使用弹簧AOP与弹簧集成.它创建一个日志文件,供分析人员分析和生成相关信息.默认情况下,它可以提供平均值,平均值,标准偏差.有关更多一般信息,请访问http://perf4j.codehaus.org/index.html
如何设置Perf4j.对于正常设置,您只需添加perf4j jar并为要监视的每个代码片段创建StopWatch实例.
StopWatch stopWatch= new StopWatch(“snipletTagName”)
…
//{your code sniplet}
…
stopwatch.stop();
Run Code Online (Sandbox Code Playgroud)
这将创建perf4j监视器,您将在控制台上获取logg信息.
本文档的主要目的是通过设置理解将perf4j与弹簧集成进行设置.
1.添加所有Jar文件.
1. perf4j-0.9.16-slf4jonly.jar
2.aspectjweaver-1.6.12.jar
3.aopalliance-1.0.jar
4.commons-logging-1.1.1.jar
5.logback-classic-1.0.7.jar
6.logback-core-1.0.7.jar
7.slf4j-api-1.7.1.jar
8.perf4j-0.9.16.jar
9.aspectjrt-1.6.1.jar
10.commons-jexl-1.1.jar
11.asm-1.5.3.jar
12.cglib-2.1_3.jar
Run Code Online (Sandbox Code Playgroud)
确保你的类路径中有所有这个jar和spring库.2.创建自己的logback.xml,perf4j将隐式使用logback.xml的内容
<configuration>
<appender name="CoalescingStatistics"
class="org.perf4j.logback.AsyncCoalescingStatisticsAppender">
<param name="TimeSlice" value="1" />
<appender-ref ref="perf4jFileAppender" />
</appender>
<appender name="RootConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date %-5level [%thread] %logger{36} [%file:%line] %msg%n
</pattern>
</layout>
</appender>
<appender name="perf4jFileAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>logs/perf4j.log</File>
<encoder>
<Pattern>%date %-5level [%thread] %logger{36} [%file:%line] %msg%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>logs/perf4j.%d{yyyy-MM-dd}.log</FileNamePattern>
</rollingPolicy>
</appender>
<!-- Loggers -->
<!-- The Perf4J logger. Note that org.perf4j.TimingLogger is the value of
the org.perf4j.StopWatch.DEFAULT_LOGGER_NAME constant. Also, note that additivity
is set to false, which is usually what is desired - this means that timing
statements will only be sent to this logger and NOT to upstream loggers. -->
<logger name="org.perf4j.TimingLogger" additivity="false">
<level value="DEBUG" />
<appender-ref ref="CoalescingStatistics" />
<appender-ref ref="perf4jFileAppender" />
<appender-ref ref="RootConsoleAppender" />
</logger>
</configuration>
Run Code Online (Sandbox Code Playgroud)
3.在弹簧配置文件中,您需要添加aspectj标签,以启用perf4j的@Profiled注释.
**>(注意:什么是@Profiled注释?:你将这个标签添加到所有的
从spring实例调用的所有类中的方法或使用依赖项注入.该对象基本上应该是注册的spring上下文,并且该方法应该由在spring上下文中注册的对象调用.有一天我浪费时间思考为什么我的方法没有被记录,然后我意识到我测试的对象不是弹簧环境的一部分.**
OK the code that you need to add to spring configuration xml is.
<!-- this is my spring-context.xml -->
<beans>
….
<aop:aspectj-autoproxy>
<aop:include name="timingAspect" />
</aop:aspectj-autoproxy>
<bean id="timingAspect" class="org.perf4j.slf4j.aop.TimingAspect" />
<!-- this is the class that will be registered with the spring and now we can get this class and call the method that we need to monitor-->
<bean class="com.perf4jexample.Test" />
….
</beans>
Run Code Online (Sandbox Code Playgroud)
4.创建将实现@Profiled注释的Test类.
public class Test {
private String testVal;
public Test() {
// TODO Auto-generated constructor stub
}
@Profiled
public void testing() {
System.out.println("testt" );
}
public String getTestVal() {
return testVal;
}
public void setTestVal(String testVal) {
this.testVal = testVal;
}
}
Run Code Online (Sandbox Code Playgroud)
5.Ok现在你已经设置了所有东西,只剩下的是测试类,它将启动spring上下文并加载perf4j.
public class Test(){
public static void main(){
AbstractApplicationContext context = new ClassPathXmlApplicationContext(
"spring-context.xml");
context.start();
Test bean = context.getBean(Test.class);
bean.testing();
}
Run Code Online (Sandbox Code Playgroud)
我希望通过遵循这个设置你应该能够在控制台上显示一行控制台aplder.
日志上的Perf4j Monitoring命令用于生成性能统计信息在您的记录器路径上执行java -jar perf4j-0.9.16.jar myLogger.log
对于生成图形java -jar perf4j-0.9.16.jar --graph perfGraphs.out myLogger.log
我希望本教程可以帮助您集成Spring,perf4j,使用Profiled注释进行logback.
归档时间: |
|
查看次数: |
8616 次 |
最近记录: |