项目使用SpringMvc,使用slf4j+logback记录日志
所以若要@Profiled起作用,关键是配置如下这行
注意:如果使用的slf4j,则使用<bean id="timingAspect" class="org.perf4j.slf4j.aop.TimingAspect" />org.perf4j.slf4j.aop.TimingAspect如果使用的log4j,则使用org.perf4j.log4j.aop.TimingAspect
perf4j有以上两种实现
1、pom依赖
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.0</version> </dependency> <dependency> <groupId>org.perf4j</groupId> <artifactId>perf4j</artifactId> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency>
2、spring配置
<!-- 【启用springmvc注解驱动】 --> <mvc:annotation-driven /> <!-- 定义注解扫描的包 Use-default-filter默认true 会扫描当前包和子包 --> <context:component-scan base-package="com.et.api"></context:component-scan> <!-- 使用cglib代理 --> <aop:aspectj-autoproxy proxy-target-class="true"/> <!--支持perf4j--> <bean id="timingAspect" class="org.perf4j.slf4j.aop.TimingAspect" />
3、
@Profiled(tag = "search({$0},{$1},{$2})")
@Profiled(tag = "search({$0},{$1},{$2})")
由此产生的日志语句形如:
2013-04-07 14:37:23,734 [main] INFO org.perf4j.TimingLogger - start[开始时间] time[执行耗时] tag[search(a,b,c)]
2013-04-07 14:37:23,734 [main] INFO org.perf4j.TimingLogger - start[开始时间] time[执行耗时] tag[search(a,b,c)]
说明:当方法有参数时,可以通过{$x}输出参数值,当参数为一个对象时,可以通过{$x.属性}的方式法输出对象的属性值;
tag标识支持JEXL表达式。