问题
起因是希望打印部分FeignClient的日志,不希望修改全局OpenFeign的日志打印。
因此不能使用
feign.client.config.default.logger-level=FULL
也不能使用全局的
@Bean
public Logger.Level openFeignFullLog() {
return Logger.Level.HEADERS;
}
现象
feign.client.config.clientname.logger-level=FULL 无效
分析
是否因为使用了 interface 上的 FeignClient.configuration 专用配置类导致上述配置无效?
@FeignClient(name="clientname", configuration=SampleClient.MiniConf.class)
public interface SampleClient {@Beanpublic ErrorDecoder errorDecoder() {return new SharedFeignErrorDecoder();}@Beanpublic RequestInterceptor basic(String username, String password) {return new BasicAuthRequestInterceptor(username, password) {@Overridepublic void apply(RequestTemplate template) {super.apply(template);}};}
}
结论
由于实际使用更加精细,同时使用了contextId 和 extends继承接口,因此需要使用contextId 作为标识。
改为
feign.client.config.contextId.logger-level=HEADERS
备注:例如有多环境的Server,FeignClient需要请求他们,但是API接口是一样的,只是认证方式、Host URL等不一样。
通过FeignClient的name区分还不够,还需要ContentId。
例如:
@FeignClient(url = "${host1}", contextId = "server-h1", qualifier = "server-h1", configuration=....)
public interface H1Client {
}
@FeignClient(url = "${host2}", contextId = "server-h2", qualifier = "server-h2", configuration=...)
public interface H2Client extends H1Client {
}
此时需要修改为:
feign.client.config.server-h1.logger-level=HEADERS
feign.client.config.server-h2.logger-level=HEADERS