在我的 springboot 应用程序中,我们使用 and 记录控制器请求/响应。有关示例代码,请参阅下面的链接。org.springframework.web.util.ContentCachingRequestWrapperorg.springframework.web.util.ContentCachingResponseWrapper自定义日志过滤器 :https://stackoverflow.com/a/42023374/1958669在应用程序中有一个存在。现在的问题是在记录它的唯一拦截器名称时 className 。因此,为了获取实际控制器名称,我尝试在拦截器中获取类名。但这给出了.interceptororg.springframework.web.util.ContentCachingRequestWrapperCustomWebMvcConfig :@Configurationpublic 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=“a.b.c.CustomLoggingFilter ”,message=“Payload_2””我的问题是如何在日志中获取实际的 ControllerClass 名称,而不是 LoggingFilterClass(一个使用org.springframework.web.util.ContentCachingRequestWrapper)
1 回答
米脂
TA贡献1836条经验 获得超3个赞
您可以尝试使用:
HandlerMethod handlerMethod = (HandlerMethod) handler;
String controllerName = handlerMethod.getBeanType().getSimpleName().replace("Controller", "");
或者,如果要打印 URI:
request.getRequestURI();
我认为您无法更改记录器,因为您不知道谁将成为控制器。
添加回答
举报
0/150
提交
取消