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

SpringCloud组件:Feign之日志输出的更多相关文章

  1. SpringCloud——Eureka Feign Ribbon Hystrix Zuul等关键组件的学习与记录

    SpringCloud--Eureka Feign Ribbon Hystrix Zuul等关键组件的学习与记录 前言:本篇是对近日学习狂神SpringCloud教程之后的感想和总结,鉴于对Sprin ...

  2. springcloud组件梳理之Feign

    最近刚好打算做一个springcloud系列的分享,趁此机会刚好梳理下springcloud常用组件的使用,今天先对feign做个简单介绍! feign是一个声明式的Web服务客户端,它使得发送web ...

  3. 【feign】拦截输出日志

    方法一: 使用Feign拦截器 /** * @author: Sam.yang * @date: 2020/11/12 16:55 * @desc: feign请求拦截 */ @Slf4j @Comp ...

  4. 程序日志输出实现-Log4j

    学习开发的过程中,我们都应该用过System.out.println():来做一些调试工作,有时候确实很有用有没有.但是这种简单粗暴的方式让程序中到处存在着sysout.这种方式难免会有性能的影响,维 ...

  5. iOS应用日志:开始编写日志组件与异常日志

    应用日志(一):开始编写日志组件 对于那些做后端开发的工程师来说,看 LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试 ...

  6. Python日志输出——logging模块

    Python日志输出——logging模块 标签: loggingpythonimportmodulelog4j 2012-03-06 00:18 31605人阅读 评论(8) 收藏 举报 分类: P ...

  7. log4j日志输出使用教程

    Log4j是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优先级.日志信息的输出目的地以及日志信息的输出格式.Log4j除了可以记录程序运行日志信息外还有一 ...

  8. log4j日志输出使用_1

    转自https://www.cnblogs.com/sky230/p/5759831.html Log4j是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优 ...

  9. feign三:覆写feign的默认配置及feign的日志

    feign三:覆写feign的默认配置及feign的日志 默认配置复写 本项目地址:http://192.168.1.103:7601 本例是通过feign调用 eureka项目中的/eureka/a ...

  10. springcloud中Feign配置详解

    Spring Cloud中Feign配置详解 到目前为止,小伙伴们对Feign的使用已经掌握的差不多了,我们在前文也提到Feign是对Ribbon和Hystrix的整合,那么在Feign中,我们要如何 ...

随机推荐

  1. [转帖]/etc/profile和/etc/environment的区别

    时间  2019-11-07 标签 profile environment 区别 繁體版 原文   https://my.oschina.net/u/2885925/blog/2989579 /etc ...

  2. redis-shake

    https://github.com/alibaba/RedisShake/wiki/%E8%BF%90%E8%A1%8C%E7%9B%91%E6%8E%A7 redis-shake is a too ...

  3. CPU 大拿的作品

    http://nieyong.github.io/wiki_cpu/index.html 改天学习写一下.

  4. git日志输出相关命令

    git log 默认输出所有的日志 git log 默认输出所有的日志 git 日志输出--只看最近的两条或者三条 有些时候我们可能只需要看最近的2或者3条日志 git log -2 日志输出--只看 ...

  5. elementUI日期选择器,对日期格式进行处理

    使用elementUI日期选择器中,获取不同格式的时间 <el-form-item label="归零时间:" prop="zeroing"> &l ...

  6. css 宽度分离原则

    我们想设计一个w=180px:h=100px的div; .demo1 { width: 180px; height: 100px; background: pink; padding: 10px; b ...

  7. c++基础之变量和基本类型

    之前我写过一系列的c/c++ 从汇编上解释它如何实现的博文.从汇编层面上看,确实c/c++的执行过程很清晰,甚至有的地方可以做相关优化.而c++有的地方就只是一个语法糖,或者说并没有转化到汇编中,而是 ...

  8. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-37-如何截图-上篇

    1.简介 这个系列的文章也讲解和分享了差不多三分之一吧,突然有小伙伴或者童鞋们问道playwright有没有截图的方法.答案当然是:肯定有的.宏哥回过头来看看确实这个非常基础的知识点还没有讲解和分享. ...

  9. 【Java】ArrayList线程不安全的坑

    问题复现: 使用Java的steam().paralleStream(),foreach()方法向ArrayList添加数据,导致ArrayList中出现空值,代码如下: public static ...

  10. 语义检索系统:基于无监督预训练语义索引召回:SimCSE、Diffcse

    基于无监督预训练语义索引召回:SimCSE.Diffcse 语义索引(可通俗理解为向量索引)技术是搜索引擎.推荐系统.广告系统在召回阶段的核心技术之一.语义索引模型的目标是:给定输入文本,模型可以从海 ...