feign?打印日志不顯示的問題及解決
feign打印日志不顯示
1.是否有設(shè)置 feign 的 Logger.Level
@Configuration public class FeignClientConfig { ?? ?@Bean ?? ?Logger.Level feignLogLevel() { ?? ??? ?return Logger.Level.FULL; ?? ?} }
2.查看是否有在 yml 或者 properties 文件中有設(shè)置 level
logging: ? level: ? ? cn.itcast.order: debug
3.如果上面兩項設(shè)置后還沒有正確日志輸出,那么請確定你是否開啟了 log4j ,如果使用了,請在 logback.xml 文件中檢查是否添加了一下內(nèi)容
<!-- 這里是你得 feign 包--> <logger name="com.business.gateway.iao" level="DEBUG" additivity="false"> ?? ?<appender-ref ref="STDOUT"/> </logger>
如果還沒有效果,那么恭喜你,中獎了,只能通過 log4j 底層源碼去 debug 了。一般前3步做完 日志都會正確出現(xiàn),最后請大家一定要去看官方文檔。
feign基本使用
在開發(fā) Spring Cloud 微服務(wù)的時候,我們知道,服務(wù)之間都是以 HTTP 接口的形式對外提供服務(wù)的,因此消費者在進行調(diào)用的時候,底層就是通過 HTTP Client 的這種方式進行訪問。
當(dāng)然我們可以使用JDK原生的 URLConnection、Apache 的 HTTP Client、Netty 異步 Http Client,Spring 的 RestTemplate 去實現(xiàn)服務(wù)間的調(diào)用。
但是最方便、最優(yōu)雅的方式是通過 Spring Cloud Open Feign 進行服務(wù)間的調(diào)用 Spring Cloud 對 Feign 進行了增強,使 Feign 支持 Spring Mvc 的注解,并整合了 Ribbon 等,從而讓 Feign 的使用更加方便。
Feign 概述
什么是 Feign
Feign 是一個聲明式的 Web Service 客戶端。它的出現(xiàn)使開發(fā) Web Service 客戶端變得很簡單。使用 Feign 只需要創(chuàng)建一個接口加上對應(yīng)的注解,比如:@FeignClient 注解。 Feign 有可插拔的注解,包括 Feign 注解和 AX-RS 注解。Feign 也支持編碼器和解碼器,Spring Cloud Open Feign 對 Feign 進行增強支持 Spring Mvc 注解,可以像 Spring Web 一樣使用 HttpMessageConverters 等。
Feign 是一種聲明式、模板化的 HTTP 客戶端。在 Spring Cloud 中使用 Feign,可以做到使用 HTTP 請求訪問遠(yuǎn)程服務(wù),就像調(diào)用本地方法一樣的,開發(fā)者完全感知不到這是在調(diào)用遠(yuǎn)程方法,更感知不到在訪問 HTTP 請求。接下來介紹一下 Feign 的特性,具體如下:
- 可插拔的注解支持,包括 Feign 注解和AX-RS注解。
- 支持可插拔的 HTTP 編碼器和解碼器。
- 支持 Hystrix 和它的 Fallback。
- 支持 Ribbon 的負(fù)載均衡。
- 支持 HTTP 請求和響應(yīng)的壓縮。Feign 是一個聲明式的 WebService 客戶端,它的目的就是讓 Web Service 調(diào)用更加簡單。它整合了 Ribbon 和 Hystrix,從而不需要開發(fā)者針對 Feign 對其進行整合。Feign 還提供了 HTTP 請求的模板,通過編寫簡單的接口和注解,就可以定義好 HTTP 請求的參數(shù)、格式、地址等信息。Feign 會完全代理 HTTP 的請求,在使用過程中我們只需要依賴注入 Bean,然后調(diào)用對應(yīng)的方法傳遞參數(shù)即可。
Feign 入門案例
此處以調(diào)用 Github API 查詢服務(wù)為例。
引入依賴
<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); ? ? } }
結(jié)果
Feign 工作原理
在開發(fā)微服務(wù)應(yīng)用時,我們會在主程序入口添加 @EnableFeignClients 注解開啟對 Feign Client 掃描加載處理。根據(jù) Feign Client 的開發(fā)規(guī)范,定義接口并加 @FeignClients 注解。
當(dāng)程序啟動時,會進行包掃描,掃描所有 @FeignClients 的注解的類,并將這些信息注入 Spring IOC 容器中。當(dāng)定義的 Feign 接口中的方法被調(diào)用時,通過JDK的代理的方式,來生成具體的 RequestTemplate。當(dāng)生成代理時,F(xiàn)eign 會為每個接口方法創(chuàng)建一個 RequetTemplate 對象,該對象封裝了 HTTP 請求需要的全部信息,如請求參數(shù)名、請求方法等信息都是在這個過程中確定的。
然后由 RequestTemplate 生成 Request,然后把 Request 交給 Client 去處理,這里指的 Client 可以是 JDK 原生的 URLConnection、Apache 的 Http Client 也可以是 Okhttp。最后 Client 被封裝到 LoadBalanceclient 類,這個類結(jié)合 Ribbon 負(fù)載均衡發(fā)起服務(wù)之間的調(diào)用。
@FeignClient 注解
name
:指定 Feign Client 的名稱,如果項目使用了 Ribbon,name 屬性會作為微服務(wù)的名稱,用于服務(wù)發(fā)現(xiàn)。url
:url 一般用于調(diào)試,可以手動指定 @FeignClient 調(diào)用的地址。decode404
:當(dāng)發(fā)生404錯誤時,如果該字段為 true,會調(diào)用 decoder 進行解碼,否則拋出 FeignException。configuration
:Feign 配置類,可以自定義 Feign 的 Encoder、Decoder、LogLevel、Contract。fallback
:定義容錯的處理類,當(dāng)調(diào)用遠(yuǎn)程接口失敗或超時時,會調(diào)用對應(yīng)接口的容錯邏輯,fallback 指定的類必須實現(xiàn) @FeignClient 標(biāo)記的接口。fallbackFactory
:工廠類,用于生成 fallback 類示例,通過這個屬性我們可以實現(xiàn)每個接口通用的容錯邏輯,減少重復(fù)的代碼。path
:定義當(dāng)前 FeignClient 的統(tǒng)一前綴。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java自定義動態(tài)鏈接數(shù)據(jù)庫示例
這篇文章主要介紹了java自定義動態(tài)鏈接數(shù)據(jù)庫示例,需要的朋友可以參考下2014-02-02Java數(shù)組常見應(yīng)用詳解【創(chuàng)建、遍歷、排序、查找】
這篇文章主要介紹了Java數(shù)組常見應(yīng)用,結(jié)合實例形式詳細(xì)分析了java數(shù)組的基本定義、創(chuàng)建、遍歷、排序、查找等相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下2020-02-02springboot?html調(diào)用js無效400問題及解決
這篇文章主要介紹了springboot?html調(diào)用js無效400的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03spring cloud consul注冊的服務(wù)報錯critical的解決
這篇文章主要介紹了spring cloud consul注冊的服務(wù)報錯critical的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03SpringBoot中的FailureAnalyzer使用詳解
這篇文章主要介紹了SpringBoot中的FailureAnalyzer使用詳解,Spring Boot的FailureAnalyzer是一個接口,它用于在Spring Boot應(yīng)用啟動失敗時提供有關(guān)錯誤的詳細(xì)信息,這對于開發(fā)者來說非常有用,因為它可以幫助我們快速識別問題并找到解決方案,需要的朋友可以參考下2023-12-12springboot2.2 集成 activity6實現(xiàn)請假流程(示例詳解)
這篇文章主要介紹了springboot2.2 集成 activity6實現(xiàn)請假完整流程示例詳解,本文通過示例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07