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