gpt4 book ai didi

java - 如何在拦截器中获取 Controller 类名以进行日志记录

转载 作者:行者123 更新时间:2023-12-02 10:07:42 25 4
gpt4 key购买 nike

在我的 springboot 应用程序中,我们使用 org.springframework.web.util.ContentCachingRequestWrapper 和 org.springframework.web.util.ContentCachingResponseWrapper 记录 Controller 请求/响应。请参阅下面的链接获取示例代码。

自定义日志过滤器:

https://stackoverflow.com/a/42023374/1958669

应用程序中存在一个拦截器。现在的问题是只记录 className 中的拦截器名称。因此,为了获取实际的 Controller 名称,我尝试在拦截器中获取类名。但这给出了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=“a.b.c.CustomLoggingFilter ",message=“Payload_2“"

我的问题是如何获取日志中的实际ControllerClass名称而不是LoggingFilterClass(使用org.springframework.web.util.ContentCachingRequestWrapper)

最佳答案

您可以尝试:

HandlerMethod handlerMethod = (HandlerMethod) handler;
String controllerName = handlerMethod.getBeanType().getSimpleName().replace("Controller", "");

或者如果您想打印 URI:

request.getRequestURI();

我认为您无法更改记录器,因为您不知道谁将是 Controller 。

关于java - 如何在拦截器中获取 Controller 类名以进行日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55221383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com