mirror of
https://github.com/BgaSol/sol-cloud
synced 2026-04-21 17:17:16 +00:00
feat(tracing): add trace start time tracking and improve request logging
This commit is contained in:
parent
c679368795
commit
c18d4956b5
4 changed files with 42 additions and 15 deletions
|
|
@ -1,8 +1,8 @@
|
|||
package com.bgasol.common.core.base.interceptor;
|
||||
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import com.bgasol.model.system.requestLog.entity.RequestLogEntity;
|
||||
import com.bgasol.common.requestLog.service.RequestLogService;
|
||||
import com.bgasol.model.system.requestLog.entity.RequestLogEntity;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
|
@ -20,13 +20,14 @@ import org.springframework.web.method.HandlerMethod;
|
|||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
|
||||
import static com.bgasol.common.constant.value.SystemConfigValues.REQUEST_EXCEPTION;
|
||||
import static com.bgasol.common.constant.value.SystemConfigValues.REQUEST_EXCEPTION_PRIMARY;
|
||||
import static com.bgasol.plugin.openfeign.interceptor.FeignInterceptor.SPAN_ID;
|
||||
import static com.bgasol.plugin.openfeign.interceptor.FeignInterceptor.TRACE_ID;
|
||||
import static com.bgasol.plugin.openfeign.interceptor.FeignInterceptor.*;
|
||||
|
||||
/**
|
||||
* 请求日志拦截器
|
||||
|
|
@ -48,20 +49,44 @@ public class RequestLoggingInterceptor implements HandlerInterceptor {
|
|||
private static final String BUSINESS_METHOD = "BUSINESS_METHOD";
|
||||
private static final String START_TIME_ATTRIBUTE = "REQUEST_START_TIME";
|
||||
|
||||
private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy_MM_dd");
|
||||
|
||||
@Lazy
|
||||
private final RequestLogService requestLogService;
|
||||
|
||||
@Override
|
||||
public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull Object handler) {
|
||||
getHandlerInfo(request, handler);
|
||||
|
||||
Date now = new Date();
|
||||
request.setAttribute(START_TIME_ATTRIBUTE, now.getTime());
|
||||
|
||||
String traceId = request.getHeader(TRACE_ID);
|
||||
String traceStartTime = request.getHeader(TRACE_START_TIME);
|
||||
|
||||
if (ObjectUtils.isEmpty(traceId)) {
|
||||
request.setAttribute(TRACE_ID, UUID.randomUUID().toString());
|
||||
|
||||
traceId = UUID.randomUUID()
|
||||
.toString()
|
||||
.replace("-", "");
|
||||
request.setAttribute(TRACE_ID, traceId);
|
||||
|
||||
traceStartTime = now.toInstant()
|
||||
.atZone(ZoneId.systemDefault())
|
||||
.toLocalDate()
|
||||
.format(DATE_FORMAT);
|
||||
request.setAttribute(TRACE_START_TIME, traceStartTime);
|
||||
|
||||
} else {
|
||||
request.setAttribute(TRACE_ID, traceId);
|
||||
request.setAttribute(TRACE_START_TIME, traceStartTime);
|
||||
}
|
||||
request.setAttribute(SPAN_ID, UUID.randomUUID().toString());
|
||||
request.setAttribute(START_TIME_ATTRIBUTE, System.currentTimeMillis());
|
||||
|
||||
String spanId = traceStartTime + "_" + UUID.randomUUID()
|
||||
.toString()
|
||||
.replace("-", "");
|
||||
request.setAttribute(SPAN_ID, spanId);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ import org.apache.commons.lang3.ObjectUtils;
|
|||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
|
|
@ -33,6 +32,7 @@ import static com.bgasol.common.constant.value.SystemConfigValues.ADMIN_USER_ID;
|
|||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class RequestLogService extends BaseTreeService<RequestLogEntity, RequestLogPageDto> {
|
||||
private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy_MM_dd");
|
||||
private final RequestLogMapper requestLogMapper;
|
||||
private final UserApi userApi;
|
||||
private final MessageEnvelopeService messageEnvelopeService;
|
||||
|
|
@ -69,7 +69,7 @@ public class RequestLogService extends BaseTreeService<RequestLogEntity, Request
|
|||
String dateStr = pageDto.getCreateTime().toInstant()
|
||||
.atZone(ZoneId.systemDefault())
|
||||
.toLocalDate()
|
||||
.format(DateTimeFormatter.ofPattern("yyyy_MM_dd"));
|
||||
.format(DATE_FORMAT);
|
||||
RequestLogTableNameHandler.TABLE_SUFFIX.set(dateStr);
|
||||
return super.findByPage(pageDto);
|
||||
}
|
||||
|
|
@ -77,8 +77,7 @@ public class RequestLogService extends BaseTreeService<RequestLogEntity, Request
|
|||
@Override
|
||||
@Transactional
|
||||
public void insert(RequestLogEntity entity) {
|
||||
// 获取当前年_月_日
|
||||
String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy_MM_dd"));
|
||||
String dateStr = entity.getId().substring(0, "yyyy_MM_dd".length());
|
||||
RequestLogTableNameHandler.TABLE_SUFFIX.set(dateStr);
|
||||
super.insert(entity);
|
||||
if (!entity.getIsPrimaryErr()) {
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ public class MybatisPlusInterceptorConfig {
|
|||
|
||||
@Bean()
|
||||
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
||||
// 初始化MybatisPlus拦截器
|
||||
// 初始化MybatisPlus拦截器 插件顺序很重要
|
||||
MybatisPlusInterceptor interceptors = new MybatisPlusInterceptor();
|
||||
|
||||
// 数据权限插件 *数据权限插件需要在分页插件之前添加
|
||||
|
|
@ -27,15 +27,15 @@ public class MybatisPlusInterceptorConfig {
|
|||
dataPermissionInterceptor.setDataPermissionHandler(dataScopeHandler);
|
||||
interceptors.addInnerInterceptor(dataPermissionInterceptor);
|
||||
|
||||
// 动态表名插件
|
||||
DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor(dynamicTableNameHandler);
|
||||
interceptors.addInnerInterceptor(dynamicTableNameInnerInterceptor);
|
||||
|
||||
// 分页插件
|
||||
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
|
||||
paginationInnerInterceptor.setMaxLimit(10000L);
|
||||
interceptors.addInnerInterceptor(paginationInnerInterceptor);
|
||||
|
||||
// 动态表名插件
|
||||
DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor(dynamicTableNameHandler);
|
||||
interceptors.addInnerInterceptor(dynamicTableNameInnerInterceptor);
|
||||
|
||||
return interceptors;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ public class FeignInterceptor implements RequestInterceptor {
|
|||
|
||||
public static final String TRACE_ID = "TRACE_ID";
|
||||
public static final String SPAN_ID = "SPAN_ID";
|
||||
public static final String TRACE_START_TIME = "TRACE_START_TIME";
|
||||
|
||||
/**
|
||||
* feign拦截器, 在feign请求发出之前,加入一些操作
|
||||
|
|
@ -46,8 +47,10 @@ public class FeignInterceptor implements RequestInterceptor {
|
|||
HttpServletRequest request = servletAttributes.getRequest();
|
||||
String spanId = (String) request.getAttribute(SPAN_ID);
|
||||
String traceId = (String) request.getAttribute(TRACE_ID);
|
||||
String traceStartTime = (String) request.getAttribute(TRACE_START_TIME);
|
||||
requestTemplate.header(SPAN_ID, spanId);
|
||||
requestTemplate.header(TRACE_ID, traceId);
|
||||
requestTemplate.header(TRACE_START_TIME, traceStartTime);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue