优化响应日志记录

This commit is contained in:
2026-04-25 12:10:59 +08:00
parent 6dff429642
commit 9b3df2b6a5

View File

@@ -18,6 +18,7 @@ import xtools.boot.core.utils.PathPatternUtils;
import xtools.boot.core.utils.SpringContextUtils; import xtools.boot.core.utils.SpringContextUtils;
import xtools.boot.log.LogBus; import xtools.boot.log.LogBus;
import xtools.boot.log.enums.LogBusBaseType; import xtools.boot.log.enums.LogBusBaseType;
import xtools.boot.thread.utils.VirtualThreadTaskUtils;
import xtools.boot.web.filter.base.BaseFilter; import xtools.boot.web.filter.base.BaseFilter;
import xtools.core.CollectionUtils; import xtools.core.CollectionUtils;
import xtools.core.enums.LogLevel; import xtools.core.enums.LogLevel;
@@ -83,13 +84,14 @@ public class HttpLogFilter extends BaseFilter implements Ordered, BaseParams {
@NonNull HttpServletResponse response, @NonNull HttpServletResponse response,
@NonNull FilterChain filterChain @NonNull FilterChain filterChain
) throws ServletException, IOException { ) throws ServletException, IOException {
long startTime = System.currentTimeMillis();
// 获取访问 uri // 获取访问 uri
String uri = HeaderUtils.getUri(request); String uri = HeaderUtils.getUri(request);
if (PathPatternUtils.match(LOG_WHITE_LIST, uri)) { if (PathPatternUtils.match(LOG_WHITE_LIST, uri)) {
filterChain.doFilter(request, response); filterChain.doFilter(request, response);
return; return;
} }
// 开始时间
long startTime = System.currentTimeMillis();
// 获取请求日志 // 获取请求日志
JSONObject log = getRequestLog(request); JSONObject log = getRequestLog(request);
@@ -105,28 +107,45 @@ public class HttpLogFilter extends BaseFilter implements Ordered, BaseParams {
// 获取请求参数 // 获取请求参数
Object reqParam = getContent(requestWrapper.getContentAsByteArray()); Object reqParam = getContent(requestWrapper.getContentAsByteArray());
Object respData;
if (!PathPatternUtils.match(RESP_WHITE_LIST, uri)) {
// 获取响应内容
respData = getContent(responseWrapper.getContentAsByteArray());
} else {
respData = "ignore";
}
// 将内容复制回原始响应
responseWrapper.copyBodyToResponse();
// 获取响应时间
long execTime = System.currentTimeMillis() - startTime;
// 保存日志
VirtualThreadTaskUtils.execute(() -> saveResponseLog(log, reqParam, respData, execTime));
}
/**
* 保存响应日志
*
* @param log 日志
* @param reqParam 请求参数
* @param respData 响应数据
* @param execTime 执行时间
*/
private void saveResponseLog(JSONObject log, Object reqParam, Object respData, long execTime) {
log.put("reqBody", reqParam); log.put("reqBody", reqParam);
log.put("respData", respData);
log.put("execTime", execTime);
// 处理异常日志 // 处理异常日志
LogLevel level = LogLevel.INFO; LogLevel level = LogLevel.INFO;
Boolean printLog = null; Boolean printLog = null;
if (!PathPatternUtils.match(RESP_WHITE_LIST, uri)) { if (respData instanceof JSONObject respJson) {
// 获取响应内容 if (Objects.equals(respJson.getBoolean("success"), false)) {
Object respData = getContent(responseWrapper.getContentAsByteArray()); level = LogLevel.ERROR;
log.put("respData", respData); if (Objects.equals(respJson.getInteger("code"), 404)) {
if (respData instanceof JSONObject respJson) { printLog = false;
if (Objects.equals(respJson.getBoolean("success"), false)) {
level = LogLevel.ERROR;
if (Objects.equals(respJson.getInteger("code"), 404)) {
printLog = false;
}
} }
} }
} }
long endTime = System.currentTimeMillis();
log.put("execTime", endTime - startTime);
// 将内容复制回原始响应
responseWrapper.copyBodyToResponse();
// 记录响应日志 // 记录响应日志
LogBus logBus = LogBus.init(level, LogBusBaseType.HTTP_REQUEST).data(log); LogBus logBus = LogBus.init(level, LogBusBaseType.HTTP_REQUEST).data(log);
if (Objects.nonNull(printLog)) { if (Objects.nonNull(printLog)) {