pre过滤器——DebugFilter

DebugFilter

debug属于条件执行过滤器,属于配置型的过滤器,只有明确在配置中配置了相关参数时才会开启执行

 1 public class DebugFilter extends ZuulFilter {
    /**这里是对应配置文件中的zuul.debug.request;默认值为false;可以配置为true,那时此过滤器就会被开启*/
2 private static final DynamicBooleanProperty ROUTING_DEBUG = DynamicPropertyFactory.getInstance().getBooleanProperty("zuul.debug.request", false);     /**这时对应配置文件中的zuul.debug.parameter;这里设置的是请求中的参数名,
      当请求中带上配置中设置的参数(例如debug),并且值为true时,会开启此过滤器*/
3
private static final DynamicStringProperty DEBUG_PARAMETER = DynamicPropertyFactory.getInstance().getStringProperty("zuul.debug.parameter", "debug"); 4 5 public DebugFilter() { 6 } 7 8 public String filterType() { 9 return "pre"; 10 } 11 12 public int filterOrder() { 13 return 1; 14 } 15   /**这里根据配置文件或请求中的参数来判断是否执行此过滤器*/ 16 public boolean shouldFilter() { 17 HttpServletRequest request = RequestContext.getCurrentContext().getRequest(); 18 return "true".equals(request.getParameter(DEBUG_PARAMETER.get())) ? true : ROUTING_DEBUG.get(); 19 } 20   /**设置DebugRouting、DebugRequest为true*/ 21 public Object run() { 22 RequestContext ctx = RequestContext.getCurrentContext(); 23 ctx.setDebugRouting(true); 24 ctx.setDebugRequest(true); 25 return null; 26 } 27 }

此过滤器开启方式:

方式一:在配置文件中配置zuul.debug.request:true;一旦设置,对所有请求都会开启此过滤器。

方式二:在配置文件中配置zuul.debug.parameter:debug;设置后,只有在请求中添加debug=true的请求才会开启此过滤器。是一种麻烦但灵活的方式。

此过滤器的作用:将当前请求上下文中的debugRoutingdebugRequest参数设置为true。

由于RequestContext对于一个请求的(生命周期)不同阶段都是不变的;所以可以利用这两个属性作为标记来进行一些debug信息记录,这样,当线上环境出问题的时候可以用来进行追踪。

实际用法:

if(ctx.debugRequest()||ctx.debugRouting()){

  //记录debug信息

}

当需要分析问题的时候开启debug过滤器,就可以记录debug日志了,当不需要的时候,可以关掉debug过滤器。

猜你喜欢

转载自www.cnblogs.com/AWSL/p/10632169.html
今日推荐