springboot使用aop記錄日誌
阿新 • • 發佈:2021-02-03
技術標籤:javaspringboot日誌aop
主要是用來記錄請求引數和響應結果,方便部署到伺服器上以後可以通過日誌來查詢問題:
首先新增如下依賴:
<!--aop-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
然後編寫一個aop的配置類:
package com.sztf.shidaikeyi.config;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang. annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
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.Arrays;
/**
* 列印引數日誌切面類
*
* @Author: ljp
* @CreateDate: 2021/2/2 14:03
*/
@Aspect
@Component
@Slf4j
public class LogAspect {
@Pointcut("execution(public * com.sztf.shidaikeyi.*.*(..))")
public void getMethodName() {
}
//在這裡指定切入點 條件一:com.sztf.shidaikeyi包下 條件二:帶有@RestController註解
@Pointcut("within(com.sztf.shidaikeyi..*) && @within(org.springframework.web.bind.annotation.RestController)")
public void printParams() {
}
/**
* 列印請求引數
*
* @param joinPoint
*/
@Before(value = "printParams()")
public void paramsLog(JoinPoint joinPoint) {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
log.info("sign -- {}", joinPoint.getSignature());
log.info("請求地址:" + request.getRequestURL().toString());
log.info("請求方式:" + request.getMethod());
if ("POST".equals(request.getMethod())) {
log.info("請求引數:" + Arrays.toString(joinPoint.getArgs()));
} else {
log.info("請求引數:{}", ServletUtil.getParamMap(request));
}
}
/**
* 列印響應內容
*
* @param o
*/
@AfterReturning(returning = "o", pointcut = "printParams()")
public void methodAfterReturn(Object o) {
log.info(JSONUtil.parse(o).toJSONString(1));
}
}
新增以後就可以列印專案了,還是比較簡單的,在這裡記錄一下