mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-11-22 15:21:53 +08:00
【代码优化】框架:简化 api 访问日志、错误日志的记录逻辑
This commit is contained in:
parent
12ce87b305
commit
2f9d9723b3
@ -2,15 +2,10 @@ package cn.iocoder.yudao.framework.apilog.config;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter;
|
import cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter;
|
||||||
import cn.iocoder.yudao.framework.apilog.core.interceptor.ApiAccessLogInterceptor;
|
import cn.iocoder.yudao.framework.apilog.core.interceptor.ApiAccessLogInterceptor;
|
||||||
import cn.iocoder.yudao.framework.apilog.core.service.ApiAccessLogFrameworkService;
|
|
||||||
import cn.iocoder.yudao.framework.apilog.core.service.ApiAccessLogFrameworkServiceImpl;
|
|
||||||
import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLogFrameworkService;
|
|
||||||
import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLogFrameworkServiceImpl;
|
|
||||||
import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum;
|
import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum;
|
||||||
import cn.iocoder.yudao.framework.web.config.WebProperties;
|
import cn.iocoder.yudao.framework.web.config.WebProperties;
|
||||||
import cn.iocoder.yudao.framework.web.config.YudaoWebAutoConfiguration;
|
import cn.iocoder.yudao.framework.web.config.YudaoWebAutoConfiguration;
|
||||||
import cn.iocoder.yudao.module.infra.api.logger.ApiAccessLogApi;
|
import cn.iocoder.yudao.module.infra.api.logger.ApiAccessLogApi;
|
||||||
import cn.iocoder.yudao.module.infra.api.logger.ApiErrorLogApi;
|
|
||||||
import jakarta.servlet.Filter;
|
import jakarta.servlet.Filter;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||||
@ -23,18 +18,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
|||||||
@AutoConfiguration(after = YudaoWebAutoConfiguration.class)
|
@AutoConfiguration(after = YudaoWebAutoConfiguration.class)
|
||||||
public class YudaoApiLogAutoConfiguration implements WebMvcConfigurer {
|
public class YudaoApiLogAutoConfiguration implements WebMvcConfigurer {
|
||||||
|
|
||||||
@Bean
|
|
||||||
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
|
|
||||||
public ApiAccessLogFrameworkService apiAccessLogFrameworkService(ApiAccessLogApi apiAccessLogApi) {
|
|
||||||
return new ApiAccessLogFrameworkServiceImpl(apiAccessLogApi);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
|
|
||||||
public ApiErrorLogFrameworkService apiErrorLogFrameworkService(ApiErrorLogApi apiErrorLogApi) {
|
|
||||||
return new ApiErrorLogFrameworkServiceImpl(apiErrorLogApi);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建 ApiAccessLogFilter Bean,记录 API 请求日志
|
* 创建 ApiAccessLogFilter Bean,记录 API 请求日志
|
||||||
*/
|
*/
|
||||||
@ -42,8 +25,8 @@ public class YudaoApiLogAutoConfiguration implements WebMvcConfigurer {
|
|||||||
@ConditionalOnProperty(prefix = "yudao.access-log", value = "enable", matchIfMissing = true) // 允许使用 yudao.access-log.enable=false 禁用访问日志
|
@ConditionalOnProperty(prefix = "yudao.access-log", value = "enable", matchIfMissing = true) // 允许使用 yudao.access-log.enable=false 禁用访问日志
|
||||||
public FilterRegistrationBean<ApiAccessLogFilter> apiAccessLogFilter(WebProperties webProperties,
|
public FilterRegistrationBean<ApiAccessLogFilter> apiAccessLogFilter(WebProperties webProperties,
|
||||||
@Value("${spring.application.name}") String applicationName,
|
@Value("${spring.application.name}") String applicationName,
|
||||||
ApiAccessLogFrameworkService apiAccessLogFrameworkService) {
|
ApiAccessLogApi apiAccessLogApi) {
|
||||||
ApiAccessLogFilter filter = new ApiAccessLogFilter(webProperties, applicationName, apiAccessLogFrameworkService);
|
ApiAccessLogFilter filter = new ApiAccessLogFilter(webProperties, applicationName, apiAccessLogApi);
|
||||||
return createFilterBean(filter, WebFilterOrderEnum.API_ACCESS_LOG_FILTER);
|
return createFilterBean(filter, WebFilterOrderEnum.API_ACCESS_LOG_FILTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@ import cn.hutool.core.util.BooleanUtil;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
||||||
import cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum;
|
import cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum;
|
||||||
import cn.iocoder.yudao.framework.apilog.core.service.ApiAccessLogFrameworkService;
|
|
||||||
import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
|
import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
||||||
@ -18,6 +17,7 @@ import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
|
|||||||
import cn.iocoder.yudao.framework.web.config.WebProperties;
|
import cn.iocoder.yudao.framework.web.config.WebProperties;
|
||||||
import cn.iocoder.yudao.framework.web.core.filter.ApiRequestFilter;
|
import cn.iocoder.yudao.framework.web.core.filter.ApiRequestFilter;
|
||||||
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
|
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
|
||||||
|
import cn.iocoder.yudao.module.infra.api.logger.ApiAccessLogApi;
|
||||||
import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO;
|
import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO;
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
@ -36,7 +36,7 @@ import java.time.temporal.ChronoUnit;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.apilog.core.interceptor.ApiAccessLogInterceptor.*;
|
import static cn.iocoder.yudao.framework.apilog.core.interceptor.ApiAccessLogInterceptor.ATTRIBUTE_HANDLER_METHOD;
|
||||||
import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
|
import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,12 +53,12 @@ public class ApiAccessLogFilter extends ApiRequestFilter {
|
|||||||
|
|
||||||
private final String applicationName;
|
private final String applicationName;
|
||||||
|
|
||||||
private final ApiAccessLogFrameworkService apiAccessLogFrameworkService;
|
private final ApiAccessLogApi apiAccessLogApi;
|
||||||
|
|
||||||
public ApiAccessLogFilter(WebProperties webProperties, String applicationName, ApiAccessLogFrameworkService apiAccessLogFrameworkService) {
|
public ApiAccessLogFilter(WebProperties webProperties, String applicationName, ApiAccessLogApi apiAccessLogApi) {
|
||||||
super(webProperties);
|
super(webProperties);
|
||||||
this.applicationName = applicationName;
|
this.applicationName = applicationName;
|
||||||
this.apiAccessLogFrameworkService = apiAccessLogFrameworkService;
|
this.apiAccessLogApi = apiAccessLogApi;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -91,7 +91,7 @@ public class ApiAccessLogFilter extends ApiRequestFilter {
|
|||||||
if (!enable) {
|
if (!enable) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
apiAccessLogFrameworkService.createApiAccessLog(accessLog);
|
apiAccessLogApi.createApiAccessLogAsync(accessLog);
|
||||||
} catch (Throwable th) {
|
} catch (Throwable th) {
|
||||||
log.error("[createApiAccessLog][url({}) log({}) 发生异常]", request.getRequestURI(), toJsonString(accessLog), th);
|
log.error("[createApiAccessLog][url({}) log({}) 发生异常]", request.getRequestURI(), toJsonString(accessLog), th);
|
||||||
}
|
}
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
package cn.iocoder.yudao.framework.apilog.core.service;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* API 访问日志 Framework Service 接口
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
public interface ApiAccessLogFrameworkService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建 API 访问日志
|
|
||||||
*
|
|
||||||
* @param reqDTO API 访问日志
|
|
||||||
*/
|
|
||||||
void createApiAccessLog(ApiAccessLogCreateReqDTO reqDTO);
|
|
||||||
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
package cn.iocoder.yudao.framework.apilog.core.service;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.infra.api.logger.ApiAccessLogApi;
|
|
||||||
import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.scheduling.annotation.Async;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* API 访问日志 Framework Service 实现类
|
|
||||||
*
|
|
||||||
* 基于 {@link ApiAccessLogApi} 服务,记录访问日志
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@Slf4j
|
|
||||||
public class ApiAccessLogFrameworkServiceImpl implements ApiAccessLogFrameworkService {
|
|
||||||
|
|
||||||
private final ApiAccessLogApi apiAccessLogApi;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Async
|
|
||||||
public void createApiAccessLog(ApiAccessLogCreateReqDTO reqDTO) {
|
|
||||||
try {
|
|
||||||
apiAccessLogApi.createApiAccessLog(reqDTO);
|
|
||||||
} catch (Throwable ex) {
|
|
||||||
// 由于 @Async 异步调用,这里打印下日志,更容易跟进
|
|
||||||
log.error("[createApiAccessLog][url({}) log({}) 发生异常]", reqDTO.getRequestUrl(), reqDTO, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
package cn.iocoder.yudao.framework.apilog.core.service;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* API 错误日志 Framework Service 接口
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
public interface ApiErrorLogFrameworkService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建 API 错误日志
|
|
||||||
*
|
|
||||||
* @param reqDTO API 错误日志
|
|
||||||
*/
|
|
||||||
void createApiErrorLog(ApiErrorLogCreateReqDTO reqDTO);
|
|
||||||
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
package cn.iocoder.yudao.framework.apilog.core.service;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.infra.api.logger.ApiErrorLogApi;
|
|
||||||
import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.scheduling.annotation.Async;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* API 错误日志 Framework Service 实现类
|
|
||||||
*
|
|
||||||
* 基于 {@link ApiErrorLogApi} 服务,记录错误日志
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@Slf4j
|
|
||||||
public class ApiErrorLogFrameworkServiceImpl implements ApiErrorLogFrameworkService {
|
|
||||||
|
|
||||||
private final ApiErrorLogApi apiErrorLogApi;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Async
|
|
||||||
public void createApiErrorLog(ApiErrorLogCreateReqDTO reqDTO) {
|
|
||||||
try {
|
|
||||||
apiErrorLogApi.createApiErrorLog(reqDTO);
|
|
||||||
} catch (Throwable ex) {
|
|
||||||
// 由于 @Async 异步调用,这里打印下日志,更容易跟进
|
|
||||||
log.error("[createApiErrorLog][url({}) log({}) 发生异常]", reqDTO.getRequestUrl(), reqDTO, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,12 +1,14 @@
|
|||||||
package cn.iocoder.yudao.framework.web.config;
|
package cn.iocoder.yudao.framework.web.config;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLogFrameworkService;
|
|
||||||
import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum;
|
import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum;
|
||||||
import cn.iocoder.yudao.framework.web.core.filter.CacheRequestBodyFilter;
|
import cn.iocoder.yudao.framework.web.core.filter.CacheRequestBodyFilter;
|
||||||
import cn.iocoder.yudao.framework.web.core.filter.DemoFilter;
|
import cn.iocoder.yudao.framework.web.core.filter.DemoFilter;
|
||||||
import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler;
|
import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler;
|
||||||
import cn.iocoder.yudao.framework.web.core.handler.GlobalResponseBodyHandler;
|
import cn.iocoder.yudao.framework.web.core.handler.GlobalResponseBodyHandler;
|
||||||
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
|
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
|
||||||
|
import cn.iocoder.yudao.module.infra.api.logger.ApiErrorLogApi;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.servlet.Filter;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
@ -25,9 +27,6 @@ import org.springframework.web.filter.CorsFilter;
|
|||||||
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
|
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
|
||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
|
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import jakarta.servlet.Filter;
|
|
||||||
|
|
||||||
@AutoConfiguration
|
@AutoConfiguration
|
||||||
@EnableConfigurationProperties(WebProperties.class)
|
@EnableConfigurationProperties(WebProperties.class)
|
||||||
public class YudaoWebAutoConfiguration implements WebMvcConfigurer {
|
public class YudaoWebAutoConfiguration implements WebMvcConfigurer {
|
||||||
@ -59,8 +58,9 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public GlobalExceptionHandler globalExceptionHandler(ApiErrorLogFrameworkService apiErrorLogFrameworkService) {
|
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
|
||||||
return new GlobalExceptionHandler(applicationName, apiErrorLogFrameworkService);
|
public GlobalExceptionHandler globalExceptionHandler(ApiErrorLogApi apiErrorLogApi) {
|
||||||
|
return new GlobalExceptionHandler(applicationName, apiErrorLogApi);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@ -5,7 +5,6 @@ import cn.hutool.core.map.MapUtil;
|
|||||||
import cn.hutool.core.util.ObjUtil;
|
import cn.hutool.core.util.ObjUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.extra.servlet.JakartaServletUtil;
|
import cn.hutool.extra.servlet.JakartaServletUtil;
|
||||||
import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLogFrameworkService;
|
|
||||||
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
||||||
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
|
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
@ -14,6 +13,7 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
|||||||
import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
|
import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
|
import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
|
||||||
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
|
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
|
||||||
|
import cn.iocoder.yudao.module.infra.api.logger.ApiErrorLogApi;
|
||||||
import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO;
|
import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO;
|
||||||
import com.fasterxml.jackson.databind.exc.InvalidFormatException;
|
import com.fasterxml.jackson.databind.exc.InvalidFormatException;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
@ -40,12 +40,7 @@ import java.time.LocalDateTime;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST;
|
import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.*;
|
||||||
import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.FORBIDDEN;
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR;
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.METHOD_NOT_ALLOWED;
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.NOT_FOUND;
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.NOT_IMPLEMENTED;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 全局异常处理器,将 Exception 翻译成 CommonResult + 对应的异常编号
|
* 全局异常处理器,将 Exception 翻译成 CommonResult + 对应的异常编号
|
||||||
@ -65,7 +60,7 @@ public class GlobalExceptionHandler {
|
|||||||
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
|
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
|
||||||
private final String applicationName;
|
private final String applicationName;
|
||||||
|
|
||||||
private final ApiErrorLogFrameworkService apiErrorLogFrameworkService;
|
private final ApiErrorLogApi apiErrorLogApi;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理所有异常,主要是提供给 Filter 使用
|
* 处理所有异常,主要是提供给 Filter 使用
|
||||||
@ -288,7 +283,7 @@ public class GlobalExceptionHandler {
|
|||||||
// 初始化 errorLog
|
// 初始化 errorLog
|
||||||
buildExceptionLog(errorLog, req, e);
|
buildExceptionLog(errorLog, req, e);
|
||||||
// 执行插入 errorLog
|
// 执行插入 errorLog
|
||||||
apiErrorLogFrameworkService.createApiErrorLog(errorLog);
|
apiErrorLogApi.createApiErrorLogAsync(errorLog);
|
||||||
} catch (Throwable th) {
|
} catch (Throwable th) {
|
||||||
log.error("[createExceptionLog][url({}) log({}) 发生异常]", req.getRequestURI(), JsonUtils.toJsonString(errorLog), th);
|
log.error("[createExceptionLog][url({}) log({}) 发生异常]", req.getRequestURI(), JsonUtils.toJsonString(errorLog), th);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.infra.api.logger;
|
|||||||
import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO;
|
import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO;
|
||||||
|
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
|
import org.springframework.scheduling.annotation.Async;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* API 访问日志的 API 接口
|
* API 访问日志的 API 接口
|
||||||
@ -18,4 +19,14 @@ public interface ApiAccessLogApi {
|
|||||||
*/
|
*/
|
||||||
void createApiAccessLog(@Valid ApiAccessLogCreateReqDTO createDTO);
|
void createApiAccessLog(@Valid ApiAccessLogCreateReqDTO createDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 【异步】创建 API 访问日志
|
||||||
|
*
|
||||||
|
* @param createDTO 访问日志 DTO
|
||||||
|
*/
|
||||||
|
@Async
|
||||||
|
default void createApiAccessLogAsync(ApiAccessLogCreateReqDTO createDTO) {
|
||||||
|
createApiAccessLog(createDTO);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.infra.api.logger;
|
|||||||
import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO;
|
import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO;
|
||||||
|
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
|
import org.springframework.scheduling.annotation.Async;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* API 错误日志的 API 接口
|
* API 错误日志的 API 接口
|
||||||
@ -18,4 +19,14 @@ public interface ApiErrorLogApi {
|
|||||||
*/
|
*/
|
||||||
void createApiErrorLog(@Valid ApiErrorLogCreateReqDTO createDTO);
|
void createApiErrorLog(@Valid ApiErrorLogCreateReqDTO createDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 【异步】创建 API 异常日志
|
||||||
|
*
|
||||||
|
* @param createDTO 异常日志 DTO
|
||||||
|
*/
|
||||||
|
@Async
|
||||||
|
default void createApiErrorLogAsync(ApiErrorLogCreateReqDTO createDTO) {
|
||||||
|
createApiErrorLog(createDTO);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user