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的请求才会开启此过滤器。是一种麻烦但灵活的方式。
此过滤器的作用:将当前请求上下文中的debugRouting
和debugRequest
参数设置为true。
由于RequestContext对于一个请求的(生命周期)不同阶段都是不变的;所以可以利用这两个属性作为标记来进行一些debug信息记录,这样,当线上环境出问题的时候可以用来进行追踪。
实际用法:
if(ctx.debugRequest()||ctx.debugRouting()){
//记录debug信息
}
当需要分析问题的时候开启debug过滤器,就可以记录debug日志了,当不需要的时候,可以关掉debug过滤器。