首頁 > 軟體

SpringBoot AOP統一處理Web請求紀錄檔的範例程式碼

2023-02-10 06:02:10

SpringBoot AOP統一處理Web請求紀錄檔

引入依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
  • 新建過濾器 WebLogAspect.java
    • 使用 @Aspect 註解修飾:說明當前類 是一個切面類。
    • 使用 @Component註解修飾:標記 切面類 為元件,這樣 IOC 容器 會為其範例化和管理(< bean>)
  • 定義切面方法:webLog() 方法名隨意
    • 使用環繞通知 @Around(“execution(public * com.daxiong.mall.Controller..(…))”) 註解修飾指定 切面範圍。
@Around("execution(public * com.daxiong.mall.controller.*.*(..))")
public Object webLog(ProceedingJoinPoint pjp) {}

記錄請求 URL:

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
log.info("URL : " + request.getRequestURL().toString());

請求型別:

log.info("HTTP_METHOD : " + request.getMethod());

IP 地址:

  • 若是本地 localhost,則會返回 ipv6 0:0:0:0:0:0:0:1
log.info("IP : " + request.getRemoteAddr());

記錄請求的 類以及方法:

  • 使用 環繞通知的 ProceedingJoinPoint 引數。
log.info("CLASS_METHOD : " + pjp.getSignature().getDeclaringTypeName() + "." + pjp.getSignature().getName());

記錄請求引數:

log.info("ARGS : " + Arrays.toString(pjp.getArgs()));

執行方法,處理請求

Object res = pjp.proceed(pjp.getArgs());

記錄響應結果 使用 jackson 將帝鄉轉換為 json 格式。

log.info("RESPONSE : " + new ObjectMapper().writeValueAsString(res));

全部:

/**
 * 列印請求和響應資訊
 */
@Aspect
@Component
public class WebLogAspect {
    private final Logger log = LoggerFactory.getLogger(WebLogAspect.class);

    @Around("execution(public * com.daxiong.mall.controller.*.*(..))")
    public Object webLog(ProceedingJoinPoint pjp) throws Throwable {
        log.info("========================新的請求========================");
        // 收到請求,記錄請求內容
        ServletRequestAttributes attributes =
                (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        log.info("URL : " + request.getRequestURL().toString());
        log.info("HTTP_METHOD : " + request.getMethod());
        // 若是 localhost,則會返回 0:0:0:0:0:0:0:1
        log.info("IP : " + request.getRemoteAddr());

        log.info("CLASS_METHOD : " + pjp.getSignature().getDeclaringTypeName() + "." + pjp.getSignature().getName());
        log.info("ARGS : " + Arrays.toString(pjp.getArgs()));

        // 執行方法,處理請求
        Object res = pjp.proceed(pjp.getArgs());

        // 記錄響應
        log.info("RESPONSE : " + new ObjectMapper().writeValueAsString(res));

        return res;
    }
}

總結

到此這篇關於SpringBoot AOP統一處理Web請求紀錄檔的文章就介紹到這了,更多相關SpringBoot AOP統一處理Web請求紀錄檔內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com