项目源码地址:https://download.csdn.net/download/weixin_42950079/87168704
OpenFeign 有 4 种日志级别:
- NONE: 不记录任何日志,是OpenFeign默认日志级别(性能最佳,适用于生产环境)。
- BASIC: 仅记录请求方法、URL、响应状态码、执行时间(适用于生产环境追踪问题)。
- HEADERS: 在记录BASIC级别的基础上,记录请求和响应的header头部信息。
- FULL: 记录请求响应的header、body 和 元数据(适用于开发和测试环境定位问题)。
1. 设置OpenFeign日志级别
需要注意的是:OpenFeign 的日志配置分为 全局配置
和局部配置
。
- 全局配置:加了@Configuration注解表示全局配置,对所有服务起作用。
- 局部配置:不加@Configuration注解表示局部配置,只针对指定的一个服务起作用。
1.1 全局配置
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 全局配置:加了@Configuration注解表示全局配置,对所有服务起作用
* 局部配置:不加@Configuration注解表示局部配置,只针对指定的一个服务起作用
*/
@Configuration
public class feignConfig {
/**
* OpenFeign日志级别:
* NONE: 不记录任何日志,是OpenFeign默认日志级别(性能最佳,适用于生产环境)
* BASIC: 仅记录请求方法、URL、响应状态码、执行时间(适用于生产环境追踪问题)
* HEADERS: 在记录BASIC级别的基础上,记录请求和响应的header头部信息
* FULL: 记录请求响应的header、body 和 元数据(适用于开发和测试环境定位问题)
*/
@Bean
public Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
}
1.2 局部配置(一)
1)在配置类中,设置 OpenFeign 的日志级别,但记得不要添加@Configuration注解,否则就变成全局配置啦。
import feign.Logger;
import org.springframework.context.annotation.Bean;
/**
* 全局配置:加了@Configuration注解表示全局配置,对所有服务起作用
* 局部配置:不加@Configuration注解表示局部配置,只针对指定的一个服务起作用
*/
public class feignConfig {
/**
* OpenFeign日志级别:
* NONE: 不记录任何日志,是OpenFeign默认日志级别(性能最佳,适用于生产环境)
* BASIC: 仅记录请求方法、URL、响应状态码、执行时间(适用于生产环境追踪问题)
* HEADERS: 在记录BASIC级别的基础上,记录请求和响应的header头部信息
* FULL: 记录请求响应的header、body 和 元数据(适用于开发和测试环境定位问题)
*/
@Bean
public Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
}
2)在 OpenFeign 接口中的@FeignClient注解中,添加configuration注解来指定该 OpenFeign 接口使用的配置类,配置类中包含对 OpenFeign 接口的扩展,如日志级别等…
import com.cd.order8010.config.OpenFeignConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 添加 Feign 接口和方法:
* * name:指定调用rest接口所对应的服务名
* * path:指定调用rest接口所在的StockController指定的RequestMapping的路径,如果StockController上没有RequestMapping,则不指定path属性
*/
@FeignClient(name = "stock-service", path = "/stock", configuration = OpenFeignConfig.class)
public interface StockFeignService {
// 声明要调用的rest接口对应的方法
@RequestMapping("/reduce")
public String reduce();
}
1.2 局部配置(二)
- 除了上面的方式可以进行 OpenFeign 局部配置之外,还可以直接在 yml 配置文件中进行 OpenFeign 局部配置。
#springboot默认日志级别是info,openfeign调试级别是debug级别,所以openfeign日志信息不会输出,需要将openfeign接口的调试级别设置成debug级别
logging:
level:
com.cd.order8010.feign: debug
# openfeign日志局部配置
feign:
client:
config:
stock-service: #对应的微服务实例名称
logger-level: FULL
2. 配置OpenFeign日志后,无法输出日志信息
OpenFeign 的默认日志级别是 NONE 级别,也就是不记录任何日志信息。但为什么按上面步骤将 OpenFeign 的日志级别设置成 FULL 级别后,还是没有打印日志信息呢?
- 这是因为 OpenFeign 的调试日志是以 debug 级别来输出的。而 Spring Boot 默认的日志级别是 info 级别。info 级别是大于 debug 级别的,所以 debug 级别的日志(
OpenFeign日志
)不会输出。
所以,想要输出 OpenFeign 日志信息,需要将 OpenFeign 接口的日志调试级别设置成 debug 级别。这一步在application.yml配置文件中进行。
#springboot默认日志级别是info,openfeign调试级别是debug级别,所以openfeign日志信息不会输出,需要将openfeign接口的调试级别设置成debug级别
logging:
level:
com.cd.order8010.feign: debug