springboot 切面方式配置,记录方法调用日志,出入参记录

我刚开始的时候将日志记录放在的controller 方法执行前后,但是每个方法都要重新写,代码量增多。

后来了解到环绕增强(@Around)是对方法执行前后做一定的业务,那用来做日志收集岂不是天造地设的一对儿。

下面是代码:

import com.yang.springbootdemo2.utils.AESUtil;
import com.yang.springbootdemo2.utils.IMoocJSONResult;
import net.sf.json.JSONObject;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
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.springframework.stereotype.Component;
/**
* @Title:
* @author: Mr.yang
* @date: 20210223$
*/
@Aspect
@Component
public class InterceptorConfig {
private static Logger logger2 = LogManager.getLogger(InterceptorConfig.class);
@Pointcut("execution(public * com.yang.springbootdemo2.controller..*(..))")
public void methodAround(){
}

@Around(value = "methodAround()")
public Object doAfterReturning(ProceedingJoinPoint point) throws Throwable {
//获取类路径+方法名
String targetMethodName = point.getTarget().getClass().getName()+"."+point.getSignature().getName();
//获取传入的参数
Object[] args = point.getArgs();
StringBuilder stringBuilder = new StringBuilder();
for (Object pojo : args){
//这里怕取错了参数后面逻辑报错做了判断
if(pojo instanceof String) {
//拿到前台传的参数,并对其进行解密输出操作
String requestJson = AESUtil.decrypt(JSONObject.fromObject(pojo.toString()).get("requestParam").toString());
stringBuilder.append("parameterValue:").append(requestJson);
}
}
//记录方法访问日志
logger2.info(targetMethodName+"方法开始执行,入参为:"+stringBuilder.toString());
Object result = point.proceed();
IMoocJSONResult imooresult = (IMoocJSONResult)result;
//记录方法返回日志
logger2.info(targetMethodName+"方法执行结束!返回参数:"+imooresult.toString());
return result;
}


}
posted @ 2021-02-26 10:50  90的生力军  阅读(894)  评论(0编辑  收藏  举报