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日志输出说明
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
SpringCloud组件:Feign之日志输出的更多相关文章
- SpringCloud——Eureka Feign Ribbon Hystrix Zuul等关键组件的学习与记录
SpringCloud--Eureka Feign Ribbon Hystrix Zuul等关键组件的学习与记录 前言:本篇是对近日学习狂神SpringCloud教程之后的感想和总结,鉴于对Sprin ...
- springcloud组件梳理之Feign
最近刚好打算做一个springcloud系列的分享,趁此机会刚好梳理下springcloud常用组件的使用,今天先对feign做个简单介绍! feign是一个声明式的Web服务客户端,它使得发送web ...
- 【feign】拦截输出日志
方法一: 使用Feign拦截器 /** * @author: Sam.yang * @date: 2020/11/12 16:55 * @desc: feign请求拦截 */ @Slf4j @Comp ...
- 程序日志输出实现-Log4j
学习开发的过程中,我们都应该用过System.out.println():来做一些调试工作,有时候确实很有用有没有.但是这种简单粗暴的方式让程序中到处存在着sysout.这种方式难免会有性能的影响,维 ...
- iOS应用日志:开始编写日志组件与异常日志
应用日志(一):开始编写日志组件 对于那些做后端开发的工程师来说,看 LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试 ...
- Python日志输出——logging模块
Python日志输出——logging模块 标签: loggingpythonimportmodulelog4j 2012-03-06 00:18 31605人阅读 评论(8) 收藏 举报 分类: P ...
- log4j日志输出使用教程
Log4j是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优先级.日志信息的输出目的地以及日志信息的输出格式.Log4j除了可以记录程序运行日志信息外还有一 ...
- log4j日志输出使用_1
转自https://www.cnblogs.com/sky230/p/5759831.html Log4j是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优 ...
- feign三:覆写feign的默认配置及feign的日志
feign三:覆写feign的默认配置及feign的日志 默认配置复写 本项目地址:http://192.168.1.103:7601 本例是通过feign调用 eureka项目中的/eureka/a ...
- springcloud中Feign配置详解
Spring Cloud中Feign配置详解 到目前为止,小伙伴们对Feign的使用已经掌握的差不多了,我们在前文也提到Feign是对Ribbon和Hystrix的整合,那么在Feign中,我们要如何 ...
随机推荐
- [转帖]/etc/profile和/etc/environment的区别
时间 2019-11-07 标签 profile environment 区别 繁體版 原文 https://my.oschina.net/u/2885925/blog/2989579 /etc ...
- 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 ...
- CPU 大拿的作品
http://nieyong.github.io/wiki_cpu/index.html 改天学习写一下.
- git日志输出相关命令
git log 默认输出所有的日志 git log 默认输出所有的日志 git 日志输出--只看最近的两条或者三条 有些时候我们可能只需要看最近的2或者3条日志 git log -2 日志输出--只看 ...
- elementUI日期选择器,对日期格式进行处理
使用elementUI日期选择器中,获取不同格式的时间 <el-form-item label="归零时间:" prop="zeroing"> &l ...
- css 宽度分离原则
我们想设计一个w=180px:h=100px的div; .demo1 { width: 180px; height: 100px; background: pink; padding: 10px; b ...
- c++基础之变量和基本类型
之前我写过一系列的c/c++ 从汇编上解释它如何实现的博文.从汇编层面上看,确实c/c++的执行过程很清晰,甚至有的地方可以做相关优化.而c++有的地方就只是一个语法糖,或者说并没有转化到汇编中,而是 ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-37-如何截图-上篇
1.简介 这个系列的文章也讲解和分享了差不多三分之一吧,突然有小伙伴或者童鞋们问道playwright有没有截图的方法.答案当然是:肯定有的.宏哥回过头来看看确实这个非常基础的知识点还没有讲解和分享. ...
- 【Java】ArrayList线程不安全的坑
问题复现: 使用Java的steam().paralleStream(),foreach()方法向ArrayList添加数据,导致ArrayList中出现空值,代码如下: public static ...
- 语义检索系统:基于无监督预训练语义索引召回:SimCSE、Diffcse
基于无监督预训练语义索引召回:SimCSE.Diffcse 语义索引(可通俗理解为向量索引)技术是搜索引擎.推荐系统.广告系统在召回阶段的核心技术之一.语义索引模型的目标是:给定输入文本,模型可以从海 ...