SpringCloud元件:Feign之日誌輸出
阿新 • • 發佈:2020-10-27
目錄
Feign之日誌輸出
在我們日常開發過程中,經常會檢視日誌解決問題,那麼Feign是不是也有日誌輸出呢?
答案:是的。
在構建@FeignClient
註解修飾的服務客戶端時,會為每一個客戶端都建立一個Feign.Logger
例項,可以利用該日誌物件的Debug
模式來分析Feign
的請求細節。
環境配置如下:
SpringBoot:2.1.1.RELEASE
SpringCloud:Greenwich.RC1
Java:1.8
Maven:3.5.2
Feign日誌輸出說明
Feign
的Level
日誌級別配置預設是:NONE
,不要跟log
日誌混淆。
日誌級別列舉類Logger.Level:
NONE:不輸出日誌
BASIC:輸出請求方法、URL、響應狀態碼、執行時間
HEADERS:基本資訊以及請求和響應頭
FULL:請求和響應的heads、body、metadata,建議使用這個級別
前期準備
- 一個服務註冊中心
spring-cloud-eureka
,埠8761。 - 建立
tairan-spring-cloud-feign-api
核心工程,對外提供api介面。 - 建立服務提供者
tairan-spring-cloud-feign-privder
工程,提供/hello介面,埠為10001,並註冊到服務中心。參考SpringCloud元件:將微服務提供者註冊到Eureka服務中心 - 建立服務消費者
tairan-spring-cloud-feign-logger
工程,提供/feign-hello介面,埠號為10003,並註冊到服務中心。參考SpringCloud元件:將微服務提供者註冊到Eureka服務中心
構建專案
同樣的是採用idea
開發工具建立一個SpringBoot
專案,在依賴選擇介面對應的新增Web、Feign以及Eureka Discovery
依賴,直接完成建立專案。
專案的pom.xml內容如下所示:
<artifactId>tairan-spring-cloud-feign-logger</artifactId> <name>tairan-spring-cloud-feign-logger</name> <description>Demo project for Spring Boot</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <skipTests>true</skipTests> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.tairan.chapter</groupId> <artifactId>tairan-spring-cloud-feign-api</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
tairan-spring-cloud-feign-logger配置
- 新增FeignConfig配置類,修改Feign日誌輸出級別,程式碼如下:
package com.tairan.chapter.feign.log.config;
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Feign配置
* 該配置放到SpringBoot可以掃描到的路徑下
*/
@Configuration
public class FeignConfig {
@Bean
Logger.Level feignLevel() {
return Logger.Level.FULL;
}
}
注意:該配置放到
SpringBoot
可以掃描到的路徑下。
- 因為我習慣yaml配置方式,所以更改了application.properties檔案為application.yml。
logging.level.
= debug開啟指定 Feign客戶
端的DEBUG模式日誌;
<FeignClient>為Feign
客戶端定義介面的完整路徑
application.yml檔案程式碼如下所示:
spring:
application:
name: tairan-spring-cloud-feign-logger
server:
port: 10003
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
# defaultZone: http://litairan:litairan@localhost:8761/eureka/
# 開啟Feign請求壓縮
feign:
compression:
request:
enabled: true
mime-types: text/xml,application/xml,application/json
min-request-size: 2048
response:
enabled: true
# Dalston SR1(待定)之後的版本預設關閉hystrix對feign的支援,如果想要使用fallback功能這裡必須啟用
hystrix:
enabled: true
logging:
level:
com.tairan.chapter.feign.api.HelloService: debug
入口類修改@SpringBootApplication掃描路徑,可以掃描到Hystrix熔斷類,即tairan-spring-cloud-feign-api中的HelloServiceHystrix類,在應用主類中通過@EnableFeignClients註解開啟Feign功能,因為需要註冊到服務中心,所以還需要@EnableDiscoveryClient註解,程式碼如下所示:
package com.tairan.chapter.feign.log;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication(scanBasePackages = "com.tairan.chapter.feign")
@EnableDiscoveryClient
@EnableFeignClients("com.tairan.chapter.feign.api")
public class TairanSpringCloudFeignLoggerApplication {
public static void main(String[] args) {
SpringApplication.run(TairanSpringCloudFeignLoggerApplication.class, args);
}
}
原始碼位置
碼雲地址(本章原始碼):https://gitee.com/litairan/tairan-spring-cloud