From 9cc035ee89e8758514a81a87932e4a8aec99d4d8 Mon Sep 17 00:00:00 2001 From: xujun Date: Thu, 14 May 2026 08:58:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=97=A5=E5=BF=97=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E6=9C=BA=E5=88=B6=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E8=8A=82=E7=82=B9=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/common/log/filter/HttpLogFilter.java | 55 ++++++++++++++++++- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/xtools-app-common/xtools-app-common-log/xtools-app-common-log-filter/src/main/java/xtools/app/common/log/filter/HttpLogFilter.java b/xtools-app-common/xtools-app-common-log/xtools-app-common-log-filter/src/main/java/xtools/app/common/log/filter/HttpLogFilter.java index bedb9da..941080d 100644 --- a/xtools-app-common/xtools-app-common-log/xtools-app-common-log-filter/src/main/java/xtools/app/common/log/filter/HttpLogFilter.java +++ b/xtools-app-common/xtools-app-common-log/xtools-app-common-log-filter/src/main/java/xtools/app/common/log/filter/HttpLogFilter.java @@ -14,10 +14,14 @@ import org.springframework.web.util.ContentCachingResponseWrapper; import xtools.app.common.log.whitelist.HttpLogWhitelist; import xtools.base.config.BaseParams; import xtools.boot.api.constant.BootCommonConstant; +import xtools.boot.api.model.dto.log.LogTrack; import xtools.boot.core.utils.PathPatternUtils; import xtools.boot.core.utils.SpringContextUtils; import xtools.boot.log.LogBus; import xtools.boot.log.enums.LogBusBaseType; +import xtools.boot.log.holder.LogTrackHolder; +import xtools.boot.log.interfaces.LogBusType; +import xtools.boot.thread.utils.VirtualThreadTaskUtils; import xtools.boot.web.filter.base.BaseFilter; import xtools.core.CollectionUtils; import xtools.core.enums.LogLevel; @@ -94,18 +98,33 @@ public class HttpLogFilter extends BaseFilter implements Ordered, BaseParams { // 获取请求日志 JSONObject log = getRequestLog(request); + + long t1 = System.currentTimeMillis() - startTime; + // 记录请求日志 - LogBus.init(LogLevel.INFO, LogBusBaseType.HTTP_REQUEST).data(log).save(); + saveLog(LogBusBaseType.HTTP_REQUEST, log); + + long t2 = System.currentTimeMillis() - startTime; // 包装请求和响应 ContentCachingRequestWrapper requestWrapper = new ContentCachingRequestWrapper(request, DEFAULT_CACHE_LIMIT); + + long t3 = System.currentTimeMillis() - startTime; + ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(response); + long t4 = System.currentTimeMillis() - startTime; + // 处理请求 filterChain.doFilter(requestWrapper, responseWrapper); + long t5 = System.currentTimeMillis() - startTime; + // 获取请求参数 Object reqParam = getContent(requestWrapper.getContentAsByteArray()); + + long t6 = System.currentTimeMillis() - startTime; + Object respData; if (!PathPatternUtils.match(RESP_WHITE_LIST, uri)) { // 获取响应内容 @@ -113,14 +132,33 @@ public class HttpLogFilter extends BaseFilter implements Ordered, BaseParams { } else { respData = "ignore"; } + + long t7 = System.currentTimeMillis() - startTime; + // 将内容复制回原始响应 responseWrapper.copyBodyToResponse(); + + long t8 = System.currentTimeMillis() - startTime; + // 保存日志 log.put("reqBody", reqParam); log.put("respData", respData); log.put("execTime", System.currentTimeMillis() - startTime); + + long t9 = System.currentTimeMillis() - startTime; + + log.put("t1", t1); + log.put("t2", t2); + log.put("t3", t3); + log.put("t4", t4); + log.put("t5", t5); + log.put("t6", t6); + log.put("t7", t7); + log.put("t8", t8); + log.put("t9", t9); + // 记录响应日志 - LogBus.init(LogLevel.INFO, LogBusBaseType.HTTP_REQUEST).data(log).save(); + saveLog(LogBusBaseType.HTTP_RESPONSE, log); } /** @@ -154,7 +192,7 @@ public class HttpLogFilter extends BaseFilter implements Ordered, BaseParams { * @param request 请求 * @return 请求日志 */ - public JSONObject getRequestLog(HttpServletRequest request) { + private JSONObject getRequestLog(HttpServletRequest request) { // 基础日志信息 JSONObject log = new JSONObject(); log.put("uri", HeaderUtils.getUri(request)); @@ -169,4 +207,15 @@ public class HttpLogFilter extends BaseFilter implements Ordered, BaseParams { return log; } + /** + * 保存日志 + * + * @param type 日志类型 + * @param log 日志 + */ + private void saveLog(LogBusType type, Object log) { + LogTrack track = LogTrackHolder.get(); + VirtualThreadTaskUtils.simple(() -> LogBus.init(LogLevel.INFO, type, track).data(log).save()); + } + }