中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

古田县| 平和县| 武威市| 庆阳市| 米易县| 梓潼县| 勐海县| 遂川县| 莎车县| 商城县| 定远县| 明星| 陇南市| 娄烦县| 新源县| 余江县| 芦山县| 边坝县| 蒲城县| 连州市| 台中市| 华坪县| 迁安市| 九龙城区| 彰武县| 松桃| 皮山县| 宁南县| 郯城县| 罗源县| 布尔津县| 正安县| 清新县| 余姚市| 夏河县| 惠东县| 通辽市| 乳山市| 务川| 柘荣县| 尉氏县|