OpenFeign 配置日志级别

在开发过程中,日志对我们调试问题拥有非常大的帮助。OpenFeign 默认情况下不会输出详细的 HTTP 请求和响应日志,但我们可以通过创建 Spring Boot 配置类来实现这一点。

注意,每个创建的 Feign 客户端都会创建一个 logger。默认情况下,logger 的名字是用于创建 Feign 客户端的接口的全类名称。并且,Feign 的日志只响应 DEBUG 级别。

你可以为每个 Feign 客户端配置 Logger.Level 对象,告诉 Feign 日志级别。日志级别可选值如下:

  • Logger.Level.NONE  没日志(默认)。

  • Logger.Level.BASIC  只记录请求方法和URL以及响应状态代码和执行时间。

  • Logger.Level.HEADERS  记录基本信息以及请求和响应头。

  • Logger.Level.FULL  记录请求和响应的header、正文和元数据。

具体做法如下:

第一步:创建配置类

在 Spring Boot 项目中,可以通过 @Configuration 注解创建一个配置类,例如 FeignConfig 配置类,代码如下:

package com.hxstrive.demo_springcloud_openfeign.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Feign 配置类
 * @author hxstrive.com
 */
@Configuration
public class FeignConfig {

    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }

}

上面配置类中定义了一个 feignLoggerLevel 方法,返回 Logger.Level.FULL,这将使 Feign 在调用时打印出完整的日志信息,包括请求和响应的详细内容,方便调试。你还可以通过这个配置类设置其他的属性,如连接超时时间和读取超时时间等。

第二步:配置日志级别💥

OpenFeign 打印的完整详细日志的日志级别是 DEBUG,我们需要再 application.yml 配置文件中将我们定义的 Feign 客户端所在包的日志级别定义为 DEBUG 或者更低级别。

配置如下:

logging:
  level:
    root: info
    com.hxstrive.demo_springcloud_openfeign.feign: TRACE

上面配置中,假设我们创建的 Feign 客户端均位于 com.hxstrive.demo_springcloud_openfeign.feign 包下面,将该包的日志级别设置为 TRACE,比 DEBUG 日志级别更低。然后,重启服务,尝试调用远程服务,输出日志如下图:

image.png

Feign 日志级别设置没起作用

如果按照上面的例子配置了 Feign 客户端日志,但是没有起到任何作用,你还可尝试:

通过 @EnableFeignClients 注解属性

@EnableFeignClients 注解有一个 defaultConfiguration 属性。如果你想让所有的 Feign 客户端都使用这个 FeignConfig 配置,可以这样使用:

@SpringBootApplication
@EnableFeignClients(defaultConfiguration = FeignConfig.class)
public class YourApplication {
    //...
}

注意:只要 FeignConfig 位于 Spring Boot 的扫描路径下,是不需要手动设置的,Spring Boot 会自动帮我们匹配到的。

通过 @FeignClient 注解属性(针对单个 Feign 客户端)

如果你只想让特定的 Feign 客户端应用这个配置,可以在 @FeignClient 注解中指定 configuration 属性。例如:

@FeignClient(value = "SERVICE-DEMO", configuration = FeignConfig.class)
public interface SimpleFeign {

    @GetMapping("/simple/hello")
    String hello();

}

通常情况下,Spring Boot 会帮我们自动处理好,不需要手动设置。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号