GRADLE
依赖
implementation 'com.alibaba:fastjson:1.2.75'
implementation 'eu.bitwalker:UserAgentUtils:1.21'
创建一个class
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
import java.util.Objects;
@Aspect
@Component
@Slf4j
public class AopLog
{
/**
* 设置切入点,按需要的项目结构设置
*/
@Pointcut("execution(public * com.zeaho.test.controller.*Controller.*(..))")
public void log()
{
}
/**
* 前置操作
* @param point 切入点
*/
@Before("log()")
public void beforeLog(JoinPoint point)
{
ServletRequestAttributes attributes =
(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();
Map<String, String[]> parameterMap = request.getParameterMap();
log.info("【请求类名】:{},【请求方法名】:{}",
point.getSignature().getDeclaringTypeName(),
point.getSignature().getName());
log.info("【请求 URL】:{},【请求 IP】:{}, 【请求参数】:{}",
request.getRequestURL(),
request.getRemoteAddr(),
JSONObject.toJSONString(parameterMap));
}
/**
* 环绕操作
* @param point 切入点
* @return 原方法返回值
* @throws Throwable 异常信息
*/
@Around("log()")
public Object aroundLog(ProceedingJoinPoint point) throws Throwable
{
Object result = point.proceed();
log.info("【接口返回值】:{}", JSONObject.toJSONString(result));
return result;
}
/**
* 后置操作,需要的话开启
*/
// @AfterReturning("log()")
// public void afterReturning()
// {
// ServletRequestAttributes attributes =
// (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
// HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();
//
// String header = request.getHeader("User-Agent");
// UserAgent userAgent = UserAgent.parseUserAgentString(header);
// log.info("【浏览器类型】:{},【操作系统】:{},【原始User-Agent】:{}",
// userAgent.getBrowser().toString(),
// userAgent.getOperatingSystem().toString(),
// header);
// }
}
效果如下: