feign?打印日志不顯示的問題及解決
feign打印日志不顯示
1.是否有設置 feign 的 Logger.Level
@Configuration
public class FeignClientConfig {
?? ?@Bean
?? ?Logger.Level feignLogLevel() {
?? ??? ?return Logger.Level.FULL;
?? ?}
}2.查看是否有在 yml 或者 properties 文件中有設置 level
logging: ? level: ? ? cn.itcast.order: debug
3.如果上面兩項設置后還沒有正確日志輸出,那么請確定你是否開啟了 log4j ,如果使用了,請在 logback.xml 文件中檢查是否添加了一下內容
<!-- 這里是你得 feign 包--> <logger name="com.business.gateway.iao" level="DEBUG" additivity="false"> ?? ?<appender-ref ref="STDOUT"/> </logger>
如果還沒有效果,那么恭喜你,中獎了,只能通過 log4j 底層源碼去 debug 了。一般前3步做完 日志都會正確出現,最后請大家一定要去看官方文檔。
feign基本使用
在開發(fā) Spring Cloud 微服務的時候,我們知道,服務之間都是以 HTTP 接口的形式對外提供服務的,因此消費者在進行調用的時候,底層就是通過 HTTP Client 的這種方式進行訪問。
當然我們可以使用JDK原生的 URLConnection、Apache 的 HTTP Client、Netty 異步 Http Client,Spring 的 RestTemplate 去實現服務間的調用。
但是最方便、最優(yōu)雅的方式是通過 Spring Cloud Open Feign 進行服務間的調用 Spring Cloud 對 Feign 進行了增強,使 Feign 支持 Spring Mvc 的注解,并整合了 Ribbon 等,從而讓 Feign 的使用更加方便。
Feign 概述
什么是 Feign
Feign 是一個聲明式的 Web Service 客戶端。它的出現使開發(fā) Web Service 客戶端變得很簡單。使用 Feign 只需要創(chuàng)建一個接口加上對應的注解,比如:@FeignClient 注解。 Feign 有可插拔的注解,包括 Feign 注解和 AX-RS 注解。Feign 也支持編碼器和解碼器,Spring Cloud Open Feign 對 Feign 進行增強支持 Spring Mvc 注解,可以像 Spring Web 一樣使用 HttpMessageConverters 等。
Feign 是一種聲明式、模板化的 HTTP 客戶端。在 Spring Cloud 中使用 Feign,可以做到使用 HTTP 請求訪問遠程服務,就像調用本地方法一樣的,開發(fā)者完全感知不到這是在調用遠程方法,更感知不到在訪問 HTTP 請求。接下來介紹一下 Feign 的特性,具體如下:
- 可插拔的注解支持,包括 Feign 注解和AX-RS注解。
- 支持可插拔的 HTTP 編碼器和解碼器。
- 支持 Hystrix 和它的 Fallback。
- 支持 Ribbon 的負載均衡。
- 支持 HTTP 請求和響應的壓縮。Feign 是一個聲明式的 WebService 客戶端,它的目的就是讓 Web Service 調用更加簡單。它整合了 Ribbon 和 Hystrix,從而不需要開發(fā)者針對 Feign 對其進行整合。Feign 還提供了 HTTP 請求的模板,通過編寫簡單的接口和注解,就可以定義好 HTTP 請求的參數、格式、地址等信息。Feign 會完全代理 HTTP 的請求,在使用過程中我們只需要依賴注入 Bean,然后調用對應的方法傳遞參數即可。
Feign 入門案例
此處以調用 Github API 查詢服務為例。
引入依賴
<dependency> ? ? <groupId>org.springframework.cloud</groupId> ? ? <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
啟動類加入如下注解:
/** 開啟 Feign 掃描支持 */ @EnableFeignClients?
Feign 接口編寫
/**
?* @Author:大漠知秋
?* @Description:使用 Feign 訪問 Github 查詢 API
?* @CreateDate:2:36 PM 2018/10/24
?*/
@FeignClient(name = "github-client", url = "https://api.github.com")
public interface GitHubFeign {
????@RequestMapping(
????????????value = "/search/repositories",
????????????method = RequestMethod.GET,
????????????produces = MediaType.APPLICATION_JSON_UTF8_VALUE
????)
????String searchRepo(@RequestParam("q") String q);
}Controller
/**
?* @Author:大漠知秋
?* @Description:使用 Feign 訪問 Github 查詢 API
?* @CreateDate:2:42 PM 2018/10/24
?*/
@RestController
@RequestMapping(
? ? ? ? value = "/github",
? ? ? ? produces = MediaType.APPLICATION_JSON_UTF8_VALUE
)
public class GitHubController {
? ? @Resource
? ? private GitHubFeign gitHubFeign;
? ? @RequestMapping(
? ? ? ? ? ? value = "/search/repositories",
? ? ? ? ? ? method = RequestMethod.GET
? ? )
? ? String searchRepo(@RequestParam("q") String q) {
? ? ? ? return gitHubFeign.searchRepo(q);
? ? }
}結果

Feign 工作原理
在開發(fā)微服務應用時,我們會在主程序入口添加 @EnableFeignClients 注解開啟對 Feign Client 掃描加載處理。根據 Feign Client 的開發(fā)規(guī)范,定義接口并加 @FeignClients 注解。
當程序啟動時,會進行包掃描,掃描所有 @FeignClients 的注解的類,并將這些信息注入 Spring IOC 容器中。當定義的 Feign 接口中的方法被調用時,通過JDK的代理的方式,來生成具體的 RequestTemplate。當生成代理時,Feign 會為每個接口方法創(chuàng)建一個 RequetTemplate 對象,該對象封裝了 HTTP 請求需要的全部信息,如請求參數名、請求方法等信息都是在這個過程中確定的。
然后由 RequestTemplate 生成 Request,然后把 Request 交給 Client 去處理,這里指的 Client 可以是 JDK 原生的 URLConnection、Apache 的 Http Client 也可以是 Okhttp。最后 Client 被封裝到 LoadBalanceclient 類,這個類結合 Ribbon 負載均衡發(fā)起服務之間的調用。
@FeignClient 注解
name:指定 Feign Client 的名稱,如果項目使用了 Ribbon,name 屬性會作為微服務的名稱,用于服務發(fā)現。url:url 一般用于調試,可以手動指定 @FeignClient 調用的地址。decode404:當發(fā)生404錯誤時,如果該字段為 true,會調用 decoder 進行解碼,否則拋出 FeignException。configuration:Feign 配置類,可以自定義 Feign 的 Encoder、Decoder、LogLevel、Contract。fallback:定義容錯的處理類,當調用遠程接口失敗或超時時,會調用對應接口的容錯邏輯,fallback 指定的類必須實現 @FeignClient 標記的接口。fallbackFactory:工廠類,用于生成 fallback 類示例,通過這個屬性我們可以實現每個接口通用的容錯邏輯,減少重復的代碼。path:定義當前 FeignClient 的統(tǒng)一前綴。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出)
這篇文章主要介紹了SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09

