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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM