因為采取數(shù)據(jù)庫讀寫分離,java服務(wù)端沒有寫權(quán)限盈包,為了方便查看接口請求沸呐,做了一個攔截器,用來獲取Controller(請求url呢燥、ip崭添、參數(shù)、方法名叛氨、耗時)并日志打印呼渣,有興趣也可以打印返回數(shù)據(jù)(不過數(shù)據(jù)量太多沒寫了),加上ret打印就行
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/**
* @Description:服務(wù)切面
* @Author: lifay
* @datetime:2019/5/23 10:54
*
*/
@Aspect
@Component
public class ServerAspect {
private final Logger logger = LoggerFactory.getLogger(ServerAspect.class);
@Around("execution(public * com.dx.controller..*.*(..))")
public Object controllerLog(ProceedingJoinPoint pdj) throws Throwable{
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
long startTime = System.currentTimeMillis();//開始時間
Object[] args = pdj.getArgs();//獲取參數(shù)數(shù)組
Object ret = pdj.proceed(args);//執(zhí)行原方法并獲取返回結(jié)果
long endTime = System.currentTimeMillis();//結(jié)束時間
// 記錄下請求內(nèi)容
StringBuilder sb = new StringBuilder();
sb.append("###請求URL: " + request.getRequestURL().toString());
sb.append(" ###IP: " + request.getRemoteAddr());
sb.append(" ###Params: " + Arrays.toString(args));
sb.append(" ###CLASS_METHOD: " + pdj.getSignature().getDeclaringTypeName() + "." + pdj.getSignature().getName());
sb.append(" ###耗時: " + (endTime - startTime) + "毫秒");
logger.info(sb.toString());
return ret;
}
}