import grp.pt.util.ConstantUtil;
import grp.pt.util.StringUtil;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
/**
* 日志输出切面
* 输出接口参数、接口耗时
*/
@Component
@Aspect
public class InterfaceParameterLogAspect {
private static final Logger LOGGER = LoggerFactory.getLogger(InterfaceParameterLogAspect.class);
@Autowired
private Environment environment;
@Pointcut("execution(public * grp..*Controller.*(..))")
private void inEndWithController(){}
@Around("inEndWithController()")
public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
StringBuilder str = new StringBuilder();
boolean isShow = environment.getProperty(ConstantUtil.INTERFACE_PARAMETER_SHOW, Boolean.class, true);
try {
if (isShow && LOGGER.isInfoEnabled()){
Object[] args = proceedingJoinPoint.getArgs();
MethodSignature signature = (MethodSignature) proceedingJoinPoint.getSignature();
str.append("执行接口 => ")
.append(proceedingJoinPoint.getTarget().getClass().getName())
.append(".")
.append(signature.getName());
if (StringUtil.isNull(args)){
str.append("()");
LOGGER.info("开始{}",str.toString());
}else {
StringBuilder param = new StringBuilder();
StringBuilder paramValue = new StringBuilder();
Class[] parameterTypes = signature.getParameterTypes();
String[] parameterNames = signature.getParameterNames();
for (int i = 0; i < args.length; i++) {
param.append(parameterTypes[i].getSimpleName()).append(" ").append(parameterNames[i]);
paramValue.append("参数:").append(parameterNames[i]).append("=").append(args[i]);
if (i < args.length-1){
param.append(",");
paramValue.append(",");
}
}
str.append("(").append(param.toString()).append(")");
System.out.println();
LOGGER.info("开始{}",str.toString());
LOGGER.info(paramValue.toString());
}
}
}catch (Exception ignored){
return proceedingJoinPoint.proceed();
}
long start = System.currentTimeMillis();
Object proceed = proceedingJoinPoint.proceed();
long end = System.currentTimeMillis();
if (isShow && LOGGER.isInfoEnabled()){
LOGGER.info("结束{},耗时:{}ms",str.toString(),end - start);
}
return proceed;
}
}
----------------------------------------------------
: 开始执行接口 => grp.pt.controller.basedata.UnifiedController.loadUnifiedTreeWithCode(String code)
: 参数:code=No_rule_cate_tenant
: 结束执行接口 => grp.pt.controller.basedata.UnifiedController.loadUnifiedTreeWithCode(String code),耗时:3ms
springBoot集成aop实战
最新推荐文章于 2023-07-13 22:08:20 发布