package com.zheng.common.aspect; import com.alibaba.dubbo.rpc.RpcContext; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Before; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * rpc提供者和消费者日志打印 * Created by ZhangShuzheng on 2017/4/19. */ public class RpcLogAspect { private static Logger _log = LoggerFactory.getLogger(RpcLogAspect.class); // 开始时间 private long startTime = 0L; // 结束时间 private long endTime = 0L; @Before("execution(* *..rpc..*.*(..))") public void doBeforeInServiceLayer(JoinPoint joinPoint) { _log.debug("doBeforeInServiceLayer"); startTime = System.currentTimeMillis(); } @After("execution(* *..rpc..*.*(..))") public void doAfterInServiceLayer(JoinPoint joinPoint) { _log.debug("doAfterInServiceLayer"); } @Around("execution(* *..rpc..*.*(..))") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { Object result = pjp.proceed(); // 是否是消费端 boolean consumerSide = RpcContext.getContext().isConsumerSide(); // 获取最后一次提供方或调用方IP String ip = RpcContext.getContext().getRemoteHost(); // 服务url String rpcUrl = RpcContext.getContext().getUrl().getParameter("application"); _log.info("consumerSide={}, ip={}, url={}", consumerSide, ip, rpcUrl); return result; } }