如何配置feign全局log
SpringBoot集成feign配置全局log
概述
項目里使用了Feign進行遠程調(diào)用,有時為了問題排查,需要開啟請求和響應(yīng)日志,下面簡介一下如何開啟Feign日志
設(shè)置Feign接口日志級別為FULL
在application.yml添加log配置
方式一: 在啟動類路徑設(shè)置debug級別的日志(推薦)
logging: ? level: ? ? com.example.demo: debug?
方式二: 在配置@FeignClien的類徑設(shè)置debug級別的日志
logging: ? level: ? ? com.example.demo.feign.DemoFeignClient: debug
配置feign的日志級別
方式一: 在application.yml配置(推薦)
feign.client.config.default.loggerLevel: full
方式二: 使用@Configuration配置類完成配置
@Configuration public class FeignConfiguration { ? @Bean ? public Logger.Level level() { return Logger.Level.FULL; } }
Feign日志級別
NONE
,無記錄(DEFAULT)。BASIC
,只記錄請求方法和URL以及響應(yīng)狀態(tài)代碼和執(zhí)行時間。HEADERS
,記錄基本信息以及請求和響應(yīng)標頭。FULL
,記錄請求和響應(yīng)的頭文件,正文和元數(shù)據(jù)
feign常用配置
Feign的組成
日志級別 | 打印內(nèi)容 |
---|---|
NONE(默認) | 不記錄任何日志 |
BASIC | 僅記錄請求方法,URL,響應(yīng)狀態(tài)代碼以及執(zhí)行時間(適合生產(chǎn)環(huán)境) |
HEADERS | 記錄BASIC級別的基礎(chǔ)上,記錄請求和響應(yīng)的header |
FULL | 記錄請求和弦ineader,body和元數(shù)據(jù) |
首先如何整合Feign
遵循SpringBoot的三板斧第一步:加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
第二步:寫注解
@EnableFeignClients //在啟動類上加
第三步:寫配置
如何給Feign添加日志級別
細粒度
方式一:代碼實現(xiàn)第一步
添加Feign配置類,可以添加在主類下,但是不用添加@Configuration。如果添加了@Configuration而且又放在了主類之下,那么就會所有Feign客戶端實例共享,同Ribbon配置類一樣父子上下文加載沖突;如果一定添加@Configuration,就放在主類加載之外的包。建議還是不用加@Configuration。
public class FeignConfig { @Bean public Logger.Level Logger() { return Logger.Level.FULL; } }
第二步:給@FeignClient添加配置類
//@FeignClient configuration = GoodsFeignConfig.class 細粒度配置,指定配置類 @FeignClient(name = "goods", configuration = FeignConfig.class)
第三步:寫配置
logging: level: com.xxx.xxx.FeignAPI: DEBUG #需要將FeignClient接口全路徑寫上# 開啟日志 格式為logging.level. Feign客戶端路徑
方式二:配置屬性實現(xiàn)
feign: client: config: #想要調(diào)用的微服務(wù)名稱 server-1: loggerLevel: FULL
全局配置
方式一:代碼實現(xiàn)添加了@Configuration放在了主類之下,那么就會所有Feign客戶端實例共享,同Ribbon配置類一樣父子上下文加載沖突;讓父子上下文ComponentScan重疊(強烈不建議)唯一正確方式
//在啟動類上為@EnableFeignClients注解添加defaultConfiguration配置 @EnableFeignClients(defaultConfiguration = FeignConfig.class)
方式二:配置屬性實現(xiàn)
feign: client: config: #將調(diào)用的微服務(wù)名稱改成default就配置成全局的了 default: loggerLevel: FULL
Feign支持的配置項
代碼方式
配置項 | 作用 |
---|---|
Logger.Level | 指定日志級別 |
Retryer | 指定重試策略 |
ErrorDecoder | 指定錯誤解碼器 |
Request.Options | 超時時間 |
Collection | 攔截器 |
SetterFactory | 用于設(shè)置Hystrix的配置屬性,F(xiàn)gien整合Hystrix才會用 |
配置屬性
feign: client: config: feignName: connectTimeout: 5000 # 相當于Request.Optionsn 連接超時時間 readTimeout: 5000 # 相當于Request.Options 讀取超時時間 loggerLevel: full # 配置Feign的日志級別,相當于代碼配置方式中的Logger errorDecoder: com.example.SimpleErrorDecoder # Feign的錯誤解碼器,相當于代碼配置方式中的ErrorDecoder retryer: com.example.SimpleRetryer # 配置重試,相當于代碼配置方式中的Retryer requestInterceptors: # 配置攔截器,相當于代碼配置方式中的RequestInterceptor - com.example.FooRequestInterceptor - com.example.BarRequestInterceptor # 是否對404錯誤解碼 decode404: false encode: com.example.SimpleEncoder decoder: com.example.SimpleDecoder contract: com.example.SimpleContract
Feign還支持對請求和響應(yīng)進行GZIP壓縮,以提高通信效率,配置方式如下:
# 配置請求GZIP壓縮 feign.compression.request.enabled=true # 配置響應(yīng)GZIP壓縮 feign.compression.response.enabled=true # 配置壓縮支持的MIME TYPE feign.compression.request.mime-types=text/xml,application/xml,application/json # 配置壓縮數(shù)據(jù)大小的下限 feign.compression.request.min-request-size=2048
Ribbon配置 VS Feign配置
粒度 | Ribbon | Feign |
---|---|---|
代碼局部 | @RibbonClient(configuration=RibbonConfig.class),RibbonConfig類必須加@Configuration,且必須放在父上下文無法掃到的包下 | @FeignClient(configuration=FeignConfig.class),F(xiàn)eignConfig類的@Configuration可以不加(可選),如果有,必須放在父上下文無法掃到的包下 |
代碼全局 | @RibbonClients(defaultConfigurtion=RibbonConfig.class) | @EnableFeignClients(defaultConfiguration = FeignConfig.class)... |
配置屬性局部 | .ribbon.NFLoadBalancerClassName... | feign.client.config..loggerLevel... |
配置屬性全局 | 無 | feign.client.config.default.loggerLevel |
Feign 代碼方式 VS 配置屬性方式
配置方式 | 有點 | 缺點 |
---|---|---|
代碼配置 | 基于代碼,更加靈活 | 如果Feign的配置類加了@Configuration注解,需注意父子上下文,線上修改需要重打包,發(fā)布 |
屬性配置 | 易上手配置更加直觀線上修改無需重新打包,發(fā)布優(yōu)先級更高 | 極端場景下沒有代碼配置更加靈活 |
優(yōu)先級:細粒度屬性配置 > 細粒度代碼配置 > 全局屬性配置 > 全局代碼配置
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Socket+JDBC+IO實現(xiàn)Java文件上傳下載器DEMO詳解
這篇文章主要介紹了Socket+JDBC+IO實現(xiàn)Java文件上傳下載器DEMO詳解,需要的朋友可以參考下2017-05-05一文搞懂Spring中@Autowired和@Resource的區(qū)別
@Autowired?和?@Resource?都是?Spring/Spring?Boot?項目中,用來進行依賴注入的注解。它們都提供了將依賴對象注入到當前對象的功能,但二者卻有眾多不同,并且這也是常見的面試題之一,所以我們今天就來盤它2022-08-08spring實現(xiàn)動態(tài)切換、添加數(shù)據(jù)源及源碼分析
這篇文章主要給大家介紹了關(guān)于spring實現(xiàn)動態(tài)切換、添加數(shù)據(jù)源及源碼分析的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-09-09Java8新特性之Base64詳解_動力節(jié)點Java學院整理
這篇文章主要為大家詳細介紹了Java8新特性之Base64的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06解決mybatis-plus動態(tài)數(shù)據(jù)源切換不生效的問題
本文主要介紹了解決mybatis-plus動態(tài)數(shù)據(jù)源切換不生效的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01