1. 程式人生 > 實用技巧 >SpringCloud元件:Feign之日誌輸出

SpringCloud元件:Feign之日誌輸出

目錄

Feign之日誌輸出

在我們日常開發過程中,經常會檢視日誌解決問題,那麼Feign是不是也有日誌輸出呢?
答案:是的。
在構建@FeignClient註解修飾的服務客戶端時,會為每一個客戶端都建立一個Feign.Logger例項,可以利用該日誌物件的Debug模式來分析Feign的請求細節。
環境配置如下:

SpringBoot:2.1.1.RELEASE
SpringCloud:Greenwich.RC1
Java:1.8
Maven:3.5.2

Feign日誌輸出說明

FeignLevel日誌級別配置預設是: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