Spring 自动打日志

 Spring中进行配置

<bean id="methodLogAdvice" class="net.xxx.log.MethodLogAdvice"/>

	<aop:config>
		<!--打印日志  配置开始-->
		<aop:advisor id="methodLog" advice-ref="methodLogAdvice" pointcut="
		   execution(* net.xxx.service.impl.ChallengeRewardJob.*(..))
		|| execution(* net.xxx.service.impl.ComplainRecordServiceImpl.*(..))
		|| execution(* net.xxx.service.impl.ChallengeServiceImpl.*(..))
		|| execution(* net.xxx.service.impl.CurrentRewardAccoundServiceImpl.*(..))
		|| execution(* net.xxx.service.impl.MusicServiceImpl.*(..))
		|| execution(* net.xxx.service.impl.UserCurrencyServiceImpl.*(..))
		|| execution(* net.xxx.service.impl.UserOperationRecordServiceImpl.*(..))
		|| execution(* net.xxx.service.impl.UserRewardServiceImpl.*(..))"/>
		<!--打印日志  配置结束  -->
	</aop:config>

 方法切面实现日志打印

import com.alibaba.dubbo.common.utils.StringUtils;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.logging.LogFactory;
import org.springframework.util.StopWatch;

/**
 * @desc 描述:打日志
 **/
public class MethodLogAdvice implements MethodInterceptor {

    /**
     * 拦截要执行的目标方法
     */
    public Object invoke(MethodInvocation invocation) throws Throwable {
        //用 commons-lang 提供的 StopWatch 计时,Spring 也提供了一个 StopWatch
        StopWatch clock = new StopWatch();
        clock.start(); //计时开始
        Object result = invocation.proceed();
        clock.stop();  //计时结束
        try {

            //方法参数类型,转换成简单类型
            Class[] params = invocation.getMethod().getParameterTypes();
            String[] simpleParams = new String[params.length];
            for (int i = 0; i < params.length; i++) {
                simpleParams[i] = params[i].getSimpleName() + "->[" + invocation.getArguments()[i].toString() + "]";
            }

            LogFactory.getLog(invocation.getThis().getClass()).info("耗时"+clock.getTotalTimeSeconds()+"秒,"+invocation.getMethod().getName() + "(" + StringUtils.join(simpleParams, ",") + ")] "+"结果"+result);
        }catch (Exception e){
            e.printStackTrace();
        }
        return result;
    }


}

效果:

       [DubboServerHandler-192.168.31.111:20884-thread-64] INFO  [net.okdi.o2o.beautiful.service.impl.ChallengeRewardServiceImpl] - 耗时0.0秒,checkWillAwardChallenge(ChallengeInfo->[net.okdi.o2o.beautiful_log_api.entity.ChallengeInfo@647b7e64])结果:true
       [DubboServerHandler-192.168.31.111:20884-thread-64] INFO  [net.okdi.o2o.beautiful.service.impl.ChallengeRewardServiceImpl] - 耗时0.0秒,checkWillAwardChallenge(ChallengeInfo->[net.okdi.o2o.beautiful_log_api.entity.ChallengeInfo@67a70ac5])结果:true
       [DubboServerHandler-192.168.31.111:20884-thread-64] INFO  [net.okdi.o2o.beautiful.service.impl.ChallengeRewardServiceImpl] - 耗时0.0秒,checkWillAwardChallenge(ChallengeInfo->[net.okdi.o2o.beautiful_log_api.entity.ChallengeInfo@7b440ad])结果:true
       [DubboServerHandler-192.168.31.111:20884-thread-64] INFO  [net.okdi.o2o.beautiful.service.impl.ChallengeRewardServiceImpl] - 耗时0.0秒,checkWillAwardChallenge(ChallengeInfo->[net.okdi.o2o.beautiful_log_api.entity.ChallengeInfo@4b0221ce])结果:true
       [DubboServerHandler-192.168.31.111:20884-thread-64] INFO  [net.okdi.o2o.beautiful.service.impl.ChallengeRewardServiceImpl] - 耗时0.0秒,checkWillAwardChallenge(ChallengeInfo->[net.okdi.o2o.beautiful_log_api.entity.ChallengeInfo@78f981da])结果:false
       

 

 

2019.06.12 更新: 如果在给整个类打日志时,想取消对某个方法打日志。请参照https://blog.csdn.net/u013476435/article/details/91578719

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值