【发布时间】:2015-02-25 15:50:22
【问题描述】:
我正在尝试在 spring boot 中使用 spring @Aspect 记录我的 @Controller 请求(请求名称和数据)。
问题是,当使用 @Valid 且没有有效数据时,该方法不会执行,因为之前发生了参数解析。
我也尝试了以下解决方案,但它们对我不起作用:
- 实现过滤器 - 需要缓存 Stream 并实现自己的 Servlet Stream + 它禁用使用 ThreadContext 的能力,以便在逻辑中识别所有日志中的请求。
- 拦截器 - 我试图添加拦截器,这有两个问题首先扩展 WebMvcAutoConfiguration.EnableWebMvcConfiguration 或 WebMvcConfigurationSupport 导致自动配置无法工作,其次是为了获取我需要在稍后阶段添加它的数据,因为在预处理中它不是尚未阅读。我想我可以使用 ThreadContext 和
@InitBinder,但它仍然给我留下了第一个问题并且非常不干净的解决方案。
如果有人对如何将@Aspect 与@Valid 一起使用有其他想法或好的建议,那将非常有帮助。 谢谢
【问题讨论】:
-
您想简单地记录请求吗?另外,您的意思是记录任何请求参数等?
-
你可以从 spring boot 中添加执行器来获取请求的日志记录。您还可以添加
CommonsRequestLoggingFilter来记录所有传入请求。使用WebMvcConfigurationSupport是错误的配置和拦截方式,您应该改用WebConfigurerAdapter。 -
我想同时记录请求路径和有效负载。
-
执行器日志不打印请求 json + 我想使用自己的记录器并将请求注入所有逻辑日志。
标签: spring spring-mvc logging spring-boot