Spring AOP 实现日志

    为了分析系统的性能问题需要把DAO和Service层的执行时间打到log里。 想用Spring aop实现,居然花费了不少时间,网上的帖子写的眼花缭乱,官网文档改版后也没以前好看(根本就没找到),所以还是自己记录一下方便以后重用。

1. Aspect类。

简单的object就可以,不需要实现某接口或继承某父类。

package com.app.web.common;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;


public class PerformanceLogAspect
{

    private static Logger logger = LogManager.getLogger(PerformanceLogAspect.class);

    public Object around (ProceedingJoinPoint joinPoint) throws Throwable {
        
        long st = System.currentTimeMillis();
        try
        {
            return joinPoint.proceed();
        } finally
        {
            long elapse = System.currentTimeMillis() - st;
            logger.debug("{}.{}() elapsed: {}", 
                    joinPoint.getTarget().getClass().getName(),
                    joinPoint.getSignature().getName(),
                    elapse);
        }
        
        
    }
}

2. spring.xml文件中配置

<aop:aspectj-autoproxy proxy-target-class="true" />
<bean id="performanceAspect" class="com.app.web.common.PerformanceLogAspect"></bean> 
<aop:config>
	<aop:aspect id="logAspect" ref="performanceAspect">
		  <aop:pointcut id="log" expression="execution(public * com.app.web.rest..*Service.*(..)) or execution(public * com.app.web.rest..*Dao.*(..))"/>  
		  <!-- 方法前触发 <aop:before pointcut-ref="log" method="before"/> -->
		   <!-- 方法后触发 <aop:after pointcut-ref="log" method="after"/> -->
			<!-- 环绕触发    --><aop:around pointcut-ref="log" method="around"/> 
	</aop:aspect> 
</aop:config>

 

简单到无语。。。

转载于:https://my.oschina.net/u/3776771/blog/1821078

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值