From 17e3523b837ecb225db1a757687170403614fc78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 18 Jun 2024 09:54:30 +0800 Subject: [PATCH] =?UTF-8?q?optimize:=20=E6=B7=BB=E5=8A=A0http=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将请求内容和响应内容记录到日志文件,可根据配置开启或关闭该功能 --- .../advice/LoggingRequestBodyAdvice.java | 63 +++++++++++++++++++ .../advice/LoggingResponseBodyAdvice.java | 41 ++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/advice/LoggingRequestBodyAdvice.java create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/advice/LoggingResponseBodyAdvice.java diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/advice/LoggingRequestBodyAdvice.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/advice/LoggingRequestBodyAdvice.java new file mode 100644 index 00000000..a414ef07 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/advice/LoggingRequestBodyAdvice.java @@ -0,0 +1,63 @@ +package com.nflg.product.bomnew.advice; + +import cn.hutool.core.util.StrUtil; +import com.nflg.product.bomnew.util.JsonUtil; +import lombok.extern.slf4j.Slf4j; +import nflg.product.common.constant.STATE; +import nflg.product.common.util.JwtUtil; +import nflg.product.common.vo.ResultVO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.core.MethodParameter; +import org.springframework.http.HttpInputMessage; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdvice; + +import java.lang.reflect.Type; + +/** + * @author 曹鹏飞 + * @date 2024/6/18 09:41:31 + */ +@Slf4j +@ControllerAdvice +@RefreshScope +public class LoggingRequestBodyAdvice implements RequestBodyAdvice { + + @Value("${logging.http.detailed:false}") + private Boolean enableHttpDetailed; + + @Override + public boolean supports(MethodParameter methodParameter, Type type, Class> aClass) { + return enableHttpDetailed; + } + + @Override + public HttpInputMessage beforeBodyRead(HttpInputMessage httpInputMessage, MethodParameter methodParameter, Type type, Class> aClass) { + return httpInputMessage; + } + + @Override + public Object afterBodyRead(Object o, HttpInputMessage httpInputMessage, MethodParameter methodParameter, Type type, Class> aClass) { + try { + log.info("请求参数: {}", JsonUtil.toJson(o)); + log.info("请求头: {}", JsonUtil.toJson(httpInputMessage.getHeaders())); + String token = httpInputMessage.getHeaders().getFirst("Authorization"); + if (StrUtil.isNotBlank(token)) { + ResultVO result = JwtUtil.parse(token); + if (result.getState().equals(STATE.Success.getState())) { + log.info("请求用户: {}", JsonUtil.toJson(result.getData())); + } + } + } catch (Exception ex) { + log.error("读取请求体出错", ex); + } + return o; + } + + @Override + public Object handleEmptyBody(Object o, HttpInputMessage httpInputMessage, MethodParameter methodParameter, Type type, Class> aClass) { + return o; + } +} \ No newline at end of file diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/advice/LoggingResponseBodyAdvice.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/advice/LoggingResponseBodyAdvice.java new file mode 100644 index 00000000..1fc4e76f --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/advice/LoggingResponseBodyAdvice.java @@ -0,0 +1,41 @@ +package com.nflg.product.bomnew.advice; + +import com.nflg.product.bomnew.util.JsonUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.core.MethodParameter; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +/** + * @author 曹鹏飞 + * @date 2024/6/18 09:42:06 + */ +@Slf4j +@ControllerAdvice +@RefreshScope +public class LoggingResponseBodyAdvice implements ResponseBodyAdvice { + + @Value("${logging.http.detailed:false}") + private Boolean enableHttpDetailed; + + @Override + public boolean supports(MethodParameter methodParameter, Class> aClass) { + return enableHttpDetailed; + } + + @Override + public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { + try { + log.info("响应数据: {}", JsonUtil.toJson(o)); + } catch (Exception ex) { + log.error("读取响应数据出错", ex); + } + return o; + } +}