为了账号安全,请及时绑定邮箱和手机立即绑定

如何在用于日志记录的侦听器中获取控制器类名

如何在用于日志记录的侦听器中获取控制器类名

Qyouu 2022-08-17 10:24:14
在我的 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();

我认为您无法更改记录器,因为您不知道谁将成为控制器。


查看完整回答
反对 回复 2022-08-17
  • 1 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信