优化响应日志记录
This commit is contained in:
@@ -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)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user