`

利用spring AOP 做方法执行时间的日志log输出

阅读更多
spring配置文件中:
	<!-- 日志时间打印 -->
	<aop:config>  
        <!-- Spring 2.0 可以用 AspectJ 的语法定义 Pointcut,这里拦截 service 包中的所有方法 -->  
        <aop:advisor id="methodTimeLog" advice-ref="methodTimeAdvice" pointcut="execution(* *..service..*(..))"/>  
    </aop:config>  
  
    <bean id="methodTimeAdvice" class="com.ambow.log.MethodTimeAdvice"/>  


MethodTimeAdvice拦截器:
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.StopWatch;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;



public class MethodTimeAdvice implements MethodInterceptor {
	protected final Log log = LogFactory.getLog(MethodTimeAdvice.class);   
	  
    /**  
     * 拦截要执行的目标方法  
     */  
    public Object invoke(MethodInvocation invocation) throws Throwable {   
        //用 commons-lang 提供的 StopWatch 计时,Spring 也提供了一个 StopWatch   
        StopWatch clock = new StopWatch();   
        clock.start(); //计时开始   
        Object result = invocation.proceed();   
        clock.stop();  //计时结束   
           
        //方法参数类型,转换成简单类型   
        Class[] params = invocation.getMethod().getParameterTypes();   
        String[] simpleParams = new String[params.length];   
        for (int i = 0; i < params.length; i++) {   
            simpleParams[i] = params[i].getSimpleName();   
        }   
           
        log.info("Takes:" + clock.getTime() + " ms ["  
                + invocation.getThis().getClass().getName() + "."  
                + invocation.getMethod().getName() + "("+StringUtils.join(simpleParams,",")+")] ");   
        return result;   
    }   


}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics