OpenFeign 继承FeignClient客户端注意事项

问题

起因是希望打印部分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 {
    @Bean
    public ErrorDecoder errorDecoder() {
      return new SharedFeignErrorDecoder();
    }

    @Bean
    public RequestInterceptor basic(String username, String password) {
      return new BasicAuthRequestInterceptor(username, password) {
        @Override
        public 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

posted @ 2025-09-29 17:50  一杯半盏  阅读(7)  评论(0)    收藏  举报