亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot-WebLogAspect用于記錄請求和響應日志的實現方法

發布時間:2021-06-23 09:09:37 來源:億速云 閱讀:453 作者:chen 欄目:大數據

本篇內容主要講解“springboot-WebLogAspect用于記錄請求和響應日志的實現方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“springboot-WebLogAspect用于記錄請求和響應日志的實現方法”吧!

  • 用途

    用于記錄spring boot的請求和響應日志; aop實現;

  • 依賴

    1. lombok -如果沒有,可以自已創建log對象

    2. Slf4j -

    3. jackson

    4. apache common

  • 實現

package xxx.xxx.xxx;

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 * 用于記錄web請求/響應日志
 */
@Component
@Aspect
@Slf4j
public class WebLogAspect {
    /**
     * 切面, xxx.xxx.xxx.web.ctl是Controller包名
     */
    @Pointcut("execution(* xxx.xxx.xxx.web.ctl..*.*(..))")
    private void parameterPointCut() {
    }

    /**
     * 方法執行前,記錄請求
     * @param joinPoint
     */
    @Before("parameterPointCut()")
    public void requestLog(JoinPoint joinPoint){
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();//這個RequestContextHolder是Springmvc提供來獲得請求的東西
        HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
        String queryStr = request.getQueryString();
        if(StringUtils.isNotEmpty(queryStr)){
            log.info("請求地址: [{}] {}",  request.getMethod(), request.getRequestURI());
        }else{
            log.info("請求地址: [{}] {}?{} ", request.getMethod(), request.getRequestURI(), queryStr);
        }

        printRequestArgs(joinPoint);
    }

    private void printRequestArgs(JoinPoint joinPoint){
        log.info("請求方法: {}", joinPoint.toString());

        Object[] reqArgs = joinPoint.getArgs();
        if(null == reqArgs){
            return;
        }

        int c = 0;
        ObjectMapper mapper = new ObjectMapper();
        for(Object arg: reqArgs){
            try{
                log.info("請求入參[{}]: {}", c, mapper.writeValueAsString(arg));
            }catch (Exception ex){
                log.error("請求入參轉換異常", ex);
            }
            c++;
        }
    }

    /**
     * 方法執行后,記錄響應
     * @param joinPoint
     * @param ret 方法執行結果注入對象
     * @return
     */
    @AfterReturning(returning = "ret",pointcut = "parameterPointCut()")
    public Object responeLog(JoinPoint joinPoint, Object ret){
        try {
            ObjectMapper mapper = new ObjectMapper();
            log.info("響應出參: {}", mapper.writeValueAsString(ret));
        } catch (Throwable ex) {
            log.error("響應異常", ex);
        }
        return ret;
    }
}

到此,相信大家對“springboot-WebLogAspect用于記錄請求和響應日志的實現方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

温泉县| 庐江县| 达日县| 嘉义县| 丹凤县| 南丰县| 略阳县| 周宁县| 腾冲县| 民和| 华坪县| 大洼县| 安塞县| 伊金霍洛旗| 大石桥市| 金堂县| 昆明市| 台江县| 伊宁市| 长白| 东光县| 包头市| 芜湖县| 庆安县| 漾濞| 花莲市| 高要市| 泉州市| 双鸭山市| 民和| 东乌| 邓州市| 孟州市| 拜泉县| 泊头市| 梓潼县| 阿合奇县| 三门峡市| 东乡| 原平市| 桂阳县|