【发布时间】:2019-08-08 19:44:21
【问题描述】:
在我的 springboot 应用程序中,我们使用 org.springframework.web.util.ContentCachingRequestWrapper 和 org.springframework.web.util.ContentCachingResponseWrapper 记录控制器请求/响应。示例代码请参考以下链接。
CustomLoggingFilter :
应用程序中有一个interceptor。现在的问题是在记录它的唯一拦截器名称时 className 。因此,为了获取实际的控制器名称,我尝试在拦截器中获取类名。但这给了org.springframework.web.util.ContentCachingRequestWrapper。
CustomWebMvcConfig:
@Configuration
public class CustomWebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CustomLogInterceptor());
}
}
自定义日志拦截器:
public class CustomLogInterceptor extends HandlerInterceptorAdapter {
private static final Logger logger = LogManager.getLogger(CustomLogInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception{
//Some operation
}
}
获取以下格式的日志:
time="2019-03-18T09:59:51,001Z", thread="[o-auto-1exec-]" ,class=“a.b.c.CustomLoggingFilter”,message=“Payload_1”
time="2019-03-18T09:59:51,001Z", thread="[o-auto-1-xec-1]" ,class=“abcCustomLoggingFilter”,message="Payload_2“"
我的问题是如何在日志中获取实际的 ControllerClass 名称而不是 LoggingFilterClass(使用 org.springframework.web.util.ContentCachingRequestWrapper 的名称)
【问题讨论】:
-
你这样做的目的是什么?
-
我正在获取以下格式的日志,即类名始终是 CustomLoggingFilter ,而应该是实际的控制器名称。
time="2019-03-18T09:59:51,001Z",thread="[o-auto-1-exec-1]",class=“a.b.c.CustomLoggingFilter ",message=“Payload_1“ time="2019-03-18T09:59:51,001Z",thread="[o-auto-1-exec-1]",class=“a.b.c.CustomLoggingFilter ",message=“Payload_2“ -
你打算用它来记录日志吗?
-
是的,仅用于记录。
-
那么我建议你最好的办法是使用一个方面来做你想做的事。
标签: java spring-boot spring-mvc logging