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);
}
}