mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 02:08:43 +08:00 
			
		
		
		
	【代码优化】框架:简化 api 访问日志、错误日志的记录逻辑
This commit is contained in:
		| @@ -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); | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV