在我的springboot应用程序中,我们使用org.springframework.web.util.ContentCachingRequestWrapper
和org.springframework.web.util.ContentCachingResponseWrapper
记录控制器的请求/响应。请参阅下面的链接以获取示例代码。
CustomLoggingFilter:
https://stackoverflow.com/a/42023374/1958669
应用程序中存在interceptor
。现在的问题是,仅记录其在className中的拦截器名称。因此,为了获取实际的控制器名称,我尝试在拦截器中获取类名称。但这给出了org.springframework.web.util.ContentCachingRequestWrapper
。
CustomWebMvcConfig:
@Configuration
public class CustomWebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CustomLogInterceptor());
}
}
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”,线程=“ [o-auto-1exec-]”,类=“ a.b.c.CustomLoggingFilter”,消息=““有效载荷_1”
time =“ 2019-03-18T09:59:51,001Z”,线程=“ [o-auto-1-xec-1]”,类=“ a.b.c.CustomLoggingFilter”,消息=“ Payload_2”
我的问题是如何在日志中获取实际的ControllerClass名称,而不是LoggingFilterClass(使用
org.springframework.web.util.ContentCachingRequestWrapper
的名称) 最佳答案
您可以尝试:
HandlerMethod handlerMethod = (HandlerMethod) handler;
String controllerName = handlerMethod.getBeanType().getSimpleName().replace("Controller", "");
或者,如果您要打印URI:
request.getRequestURI();
我认为您无法更改记录器,因为您不知道谁将成为控制者。