如何配置feign全局log
SpringBoot集成feign配置全局log
概述
項目里使用了Feign進(jìn)行遠(yuǎn)程調(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)標(biāo)頭。FULL,記錄請求和響應(yīng)的頭文件,正文和元數(shù)據(jù)
feign常用配置
Feign的組成
| 日志級別 | 打印內(nèi)容 |
|---|---|
| NONE(默認(rèn)) | 不記錄任何日志 |
| 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添加日志級別
細(xì)粒度
方式一:代碼實現(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 細(xì)粒度配置,指定配置類 @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重疊(強(qiáng)烈不建議)唯一正確方式
//在啟動類上為@EnableFeignClients注解添加defaultConfiguration配置 @EnableFeignClients(defaultConfiguration = FeignConfig.class)
方式二:配置屬性實現(xiàn)
feign:
client:
config:
#將調(diào)用的微服務(wù)名稱改成default就配置成全局的了
default:
loggerLevel: FULLFeign支持的配置項
代碼方式
| 配置項 | 作用 |
|---|---|
| Logger.Level | 指定日志級別 |
| Retryer | 指定重試策略 |
| ErrorDecoder | 指定錯誤解碼器 |
| Request.Options | 超時時間 |
| Collection | 攔截器 |
| SetterFactory | 用于設(shè)置Hystrix的配置屬性,F(xiàn)gien整合Hystrix才會用 |
配置屬性
feign:
client:
config:
feignName:
connectTimeout: 5000 # 相當(dāng)于Request.Optionsn 連接超時時間
readTimeout: 5000 # 相當(dāng)于Request.Options 讀取超時時間
loggerLevel: full # 配置Feign的日志級別,相當(dāng)于代碼配置方式中的Logger
errorDecoder: com.example.SimpleErrorDecoder # Feign的錯誤解碼器,相當(dāng)于代碼配置方式中的ErrorDecoder
retryer: com.example.SimpleRetryer # 配置重試,相當(dāng)于代碼配置方式中的Retryer
requestInterceptors: # 配置攔截器,相當(dāng)于代碼配置方式中的RequestInterceptor
- com.example.FooRequestInterceptor
- com.example.BarRequestInterceptor
# 是否對404錯誤解碼
decode404: false
encode: com.example.SimpleEncoder
decoder: com.example.SimpleDecoder
contract: com.example.SimpleContractFeign還支持對請求和響應(yīng)進(jìn)行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)先級:細(xì)粒度屬性配置 > 細(xì)粒度代碼配置 > 全局屬性配置 > 全局代碼配置
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于接口ApplicationContext中的getBean()方法使用
這篇文章主要介紹了關(guān)于接口ApplicationContext中的getBean()方法使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
Java實現(xiàn)PDF轉(zhuǎn)Word的示例代碼(無水印無頁數(shù)限制)
這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實現(xiàn)PDF轉(zhuǎn)Word文件的效果,并可以無水印、無頁數(shù)限制。文中的示例代碼講解詳細(xì),需要的可以參考一下2022-05-05
帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之棧
這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之棧 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01
Java實現(xiàn)訂單超時未支付自動取消的8種方法總結(jié)
這篇文章主要為大家介紹了Java實現(xiàn)訂單超時未支付自動取消功能的8種不同方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-08-08
在Spring boot的項目中使用Junit進(jìn)行單體測試
今天小編就為大家分享一篇關(guān)于spring boot使用Junit進(jìn)行測試,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12

