feign开启日志Logger.Level feignLoggerLevel()中Level爆红的解决

目录
  • 开启日志Logger.Level feignLoggerLevel()中Level爆红
  • feign开启日志
    • 配置和说明
    • 如果只想让某一个feign调用的时候有日志怎么办

开启日志Logger.Level feignLoggerLevel()中Level爆红

今天在学习feign时测试其配置日志的功能,发现Logger不存在Level方法,百度了一圈没有找到方法

结果自己摸索发现是导错了包,如下是错误的包

应该导入feign中的Logger包,如下

feign开启日志

配置和说明

配置

feign出于性能考虑,默认是没有日志的,需要手动开启.

package com.tuling.mall.feigndemo.config;
import com.tuling.mall.feigndemo.interceptor.FeignAuthRequestInterceptor;
import feign.Contract;
import feign.Logger;
import feign.Request;
import feign.auth.BasicAuthRequestInterceptor;
import feign.codec.Decoder;
import feign.codec.Encoder;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration // 注意,这个配置了@Configuration之后就是全局的bean了,就需要成了全局配置了
public class FeignConfig {
    /**
     * 日志级别
     * 通过源码可以看到日志等级有 4 种,分别是:
     * NONE:不输出日志。
     * BASIC:只输出请求方法的 URL 和响应的状态码以及接口执行的时间。
     * HEADERS:将 BASIC 信息和请求头信息输出。
     * FULL:输出完整的请求信息。
     */
    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

BASIC级别

只输出请求方法的 URL 和响应的状态码以及接口执行的时间。

   @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.BASIC;
    }

当feign进行远程调用的时候控制台输出:

2022-01-12 20:39:20.537 DEBUG 30012 --- [nio-8055-exec-1] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] ---> GET http://mall-order/order/findOrderByUserId/1 HTTP/1.1
2022-01-12 20:39:20.638 DEBUG 30012 --- [nio-8055-exec-1] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] <--- HTTP/1.1 200 (80ms)

HEADERS

将 BASIC 信息和请求头信息输出。

    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.HEADERS;
    }

当feign进行远程调用的时候控制台输出

2022-01-12 20:40:37.499 DEBUG 27368 --- [nio-8055-exec-5] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] ---> GET http://mall-order/order/findOrderByUserId/1 HTTP/1.1
2022-01-12 20:40:37.500 DEBUG 27368 --- [nio-8055-exec-5] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] Accept-Encoding: gzip
2022-01-12 20:40:37.500 DEBUG 27368 --- [nio-8055-exec-5] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] Accept-Encoding: deflate
2022-01-12 20:40:37.500 DEBUG 27368 --- [nio-8055-exec-5] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] Authorization: 563116cd-7124-4564-9ac5-1c740e8d70ec
2022-01-12 20:40:37.500 DEBUG 27368 --- [nio-8055-exec-5] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] ---> END HTTP (0-byte body)
2022-01-12 20:40:37.553 DEBUG 27368 --- [nio-8055-exec-5] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] <--- HTTP/1.1 200 (50ms)
2022-01-12 20:40:37.553 DEBUG 27368 --- [nio-8055-exec-5] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] connection: keep-alive
2022-01-12 20:40:37.553 DEBUG 27368 --- [nio-8055-exec-5] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] content-type: application/json
2022-01-12 20:40:37.554 DEBUG 27368 --- [nio-8055-exec-5] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] date: Wed, 12 Jan 2022 12:40:37 GMT
2022-01-12 20:40:37.554 DEBUG 27368 --- [nio-8055-exec-5] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] keep-alive: timeout=60
2022-01-12 20:40:37.554 DEBUG 27368 --- [nio-8055-exec-5] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] transfer-encoding: chunked
2022-01-12 20:40:37.554 DEBUG 27368 --- [nio-8055-exec-5] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] <--- END HTTP (100-byte body)

FULL级别

输出完整的请求信息。

   @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }

当feign进行远程调用的时候控制台输出

2022-01-12 20:41:18.168 DEBUG 30232 --- [nio-8055-exec-2] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] ---> GET http://mall-order/order/findOrderByUserId/1 HTTP/1.1
2022-01-12 20:41:18.169 DEBUG 30232 --- [nio-8055-exec-2] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] Accept-Encoding: gzip
2022-01-12 20:41:18.169 DEBUG 30232 --- [nio-8055-exec-2] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] Accept-Encoding: deflate
2022-01-12 20:41:18.169 DEBUG 30232 --- [nio-8055-exec-2] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] Authorization: f4ff1ace-8aa3-4d6e-974f-83c60821210d
2022-01-12 20:41:18.169 DEBUG 30232 --- [nio-8055-exec-2] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] ---> END HTTP (0-byte body)
2022-01-12 20:41:18.216 DEBUG 30232 --- [nio-8055-exec-2] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] <--- HTTP/1.1 200 (45ms)
2022-01-12 20:41:18.216 DEBUG 30232 --- [nio-8055-exec-2] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] connection: keep-alive
2022-01-12 20:41:18.216 DEBUG 30232 --- [nio-8055-exec-2] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] content-type: application/json
2022-01-12 20:41:18.216 DEBUG 30232 --- [nio-8055-exec-2] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] date: Wed, 12 Jan 2022 12:41:18 GMT
2022-01-12 20:41:18.216 DEBUG 30232 --- [nio-8055-exec-2] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] keep-alive: timeout=60
2022-01-12 20:41:18.216 DEBUG 30232 --- [nio-8055-exec-2] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] transfer-encoding: chunked
2022-01-12 20:41:18.216 DEBUG 30232 --- [nio-8055-exec-2] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] 
2022-01-12 20:41:18.217 DEBUG 30232 --- [nio-8055-exec-2] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] {"msg":"success","code":0,"orders":[{"id":1,"userId":"1","commodityCode":"1","count":1,"amount":1}]}
2022-01-12 20:41:18.217 DEBUG 30232 --- [nio-8055-exec-2] c.t.m.feigndemo.feign.OrderFeignService  : [OrderFeignService#findOrderByUserId] <--- END HTTP (100-byte body)

如果只想让某一个feign调用的时候有日志怎么办

在Java代码里面配置

可以用configuration = Feign2Config.class 来指定你的feign配置文件,然后在这个FeignConfig.class 配置文件里面配置日志,这样的话,只有这一个feign接口类打印日志了

需要注意的是Feign2Config不要加@Configuration注解,因为如果加了的话,就成了全局配置类了,那么所有的feign接口都会使用这个配置文件了.

@FeignClient(value = "mall-order",path = "/order",configuration = Feign2Config.class)
public interface OrderFeignService {
    @RequestMapping("/findOrderByUserId/{userId}")
    R findOrderByUserId(@PathVariable("userId") Integer userId);
    @RequestMapping(value = "/save",consumes = MediaType.APPLICATION_JSON_VALUE)
    R save(@RequestBody OrderVo order);
package com.tuling.mall.feigndemo.config;
import com.tuling.mall.feigndemo.interceptor.FeignAuthRequestInterceptor;
import feign.Contract;
import feign.Logger;
import feign.Request;
import feign.auth.BasicAuthRequestInterceptor;
import feign.codec.Decoder;
import feign.codec.Encoder;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//@Configuration // 注意,这个配置了@Configuration之后就是全局的bean了,就需要成了全局配置了
public class Feign2Config {
    /**
     * 日志级别
     * 通过源码可以看到日志等级有 4 种,分别是:
     * NONE:不输出日志。
     * BASIC:只输出请求方法的 URL 和响应的状态码以及接口执行的时间。
     * HEADERS:将 BASIC 信息和请求头信息输出。
     * FULL:输出完整的请求信息。
     */
    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

在yaml里面配置

这样 mall-order微服务的feign日志级别就是FULL了.

feign:
  client:
    config:
      mall-order:  #对应微服务
        loggerLevel: FULL

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 使用Feign logging 开启调用日志

    目录 Feign logging开启调用日志 Feign启用日志 需求 实现步骤 Feign logging开启调用日志 application.yml 配置 logging: level: yourproject.userClient: debug FeignConfiguration @Configuration public class FeignConfiguration { @Bean Logger.Level feignLoggerLevel() { return Logger.Le

  • 如何配置feign全局log

    目录 SpringBoot集成feign配置全局log 概述 设置Feign接口日志级别为FULL feign常用配置 Feign的组成 首先如何整合Feign 如何给Feign添加日志级别 细粒度 全局配置 Feign支持的配置项 Ribbon配置 VS Feign配置 Feign 代码方式 VS 配置属性方式 SpringBoot集成feign配置全局log 概述 项目里使用了Feign进行远程调用,有时为了问题排查,需要开启请求和响应日志,下面简介一下如何开启Feign日志 设置Feign

  • 关于Feign的覆写默认配置和Feign的日志

    目录 Feign的覆写默认配置 Feign Logging 日志 Feign进行日志配置 Feign有四种类型的日志 列出两种在项目中配置Feign日志的方法 Feign的覆写默认配置 A central concept in Spring Cloud’s Feign support is that of the named client. Each feign client is part of an ensemble of components that work together to c

  • feign开启日志Logger.Level feignLoggerLevel()中Level爆红的解决

    目录 开启日志Logger.Level feignLoggerLevel()中Level爆红 feign开启日志 配置和说明 如果只想让某一个feign调用的时候有日志怎么办 开启日志Logger.Level feignLoggerLevel()中Level爆红 今天在学习feign时测试其配置日志的功能,发现Logger不存在Level方法,百度了一圈没有找到方法 结果自己摸索发现是导错了包,如下是错误的包 应该导入feign中的Logger包,如下 feign开启日志 配置和说明 配置 fe

  • golang默认Logger日志库在项目中使用Zap日志库

    目录 在Go语言项目中使用Zap日志库介绍 默认的Go Logger日志库 实现Go Logger 设置Logger 使用Logger Logger的运行 Go Logger的优势和劣势 优势 劣势 Uber-go Zap日志库 为什么选择Uber-go zap 安装 配置Zap Logger Logger Sugared Logger 定制logger 将日志写入文件而不是终端 将JSON Encoder更改为普通的Log Encoder 更改时间编码并添加调用者详细信息 使用Lumberja

  • docker中mysql开启日志的实现步骤

    目录 1.查看安mysql容器状态 2.进入容器内部 3.登录mysql数据库 4.查看binlog日志是否开启,查看后关闭mysql 5.编辑配置文件开启binlog,设置log文件 6.退出容器 7.重启mysql容器,且查看是否启动成功 8.查看binlog 日志状态是否开启 9.查看日志 1.查看安mysql容器状态 docker ps 2.进入容器内部 docker exec -it 4ae9238c176a /bin/bash 3.登录mysql数据库 mysql -uroot -p

  • feign 打印日志不显示的问题及解决

    目录 feign打印日志不显示 feign基本使用 Feign 概述 Feign 入门案例 Feign 工作原理 feign打印日志不显示 1.是否有设置 feign 的 Logger.Level @Configuration public class FeignClientConfig {     @Bean     Logger.Level feignLogLevel() {         return Logger.Level.FULL;     } } 2.查看是否有在 yml 或者

  • php中laravel调度执行错误解决方法

    我们说laravel框架的功能性比较明确,作为全栈框架在代码的运行上是比较简洁的.在对laravel框架安装完成后,我们可以就其中的一些操作为大家展现.本篇要带来的是在laravel中的调度,分为两种不同目录的情况讨论,同时把可能在调度中会出现的错误情况,单独为大家呈现并解决. 1.不在laravel根目录(命令行操作前的地址) php /www/wwwroot/laravel6/artisan schedule:run /www/wwwroot/laravel/artisan 解释 /www/

  • Spring Kafka中如何通过参数配置解决超时问题详解

    目录 背景 思路 过程 步骤一,查询版本特性 步骤二,查源码 步骤三,查自身的代码 总结 背景 这是我们团队负责的一个不太核心的服务.之前与外部交互时应外部要求由普通kafka集群改成加密kafka集群.我们是数据生产端. 改的过程中并跑上线,60%的请求耗时增加了2倍,也还是在百毫秒的量级可以接受.但是每次重启的第一个请求要5s以上,会超过:运行过程中,一两个月也会有一次超时.因为我们有三次重试,整体没有影响成功率. 上线的时候我们问过网络组,还专门请教过公司专业负责kafka的团队.结论是:

  • php中unserialize返回false的解决方法

    本文实例讲述了php中unserialize返回false的解决方法,分享给大家供大家参考.具体方法如下: php 提供serialize(序列化) 与unserialize(反序列化)方法. 使用serialize序列化后,再使用unserialize反序列化就可以获取原来的数据. 先来看看如下程序实例: <?php $arr = array( 'name' => 'fdipzone', 'gender' => 'male' ); $str = serialize($arr); //序

  • 关于验证码在IE中不刷新的快速解决方法

    今天在做验证码的时候发现在IE中,验证码不会刷新,而谷歌等其他浏览器没有问题,所以我想到应该是缓存问题,因为IE默认的设置是如果访问地址没变化就不会去获取而是加载缓存中的内容 所以解决方案就是在验证码的切换地址后面加一个随机的参数 例如: <script> //换验证码 function changeimg(){ /* math.random范围是0-1 *999变成0-999 +3000 就是3000-3999 */ var time=Math.round(Math.random()*999

  • JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决

    var date = new Date('2016-11-11 11:11:11'); document.write(date); 最近在写一个时间判断脚本,需要将固定好的字符串时间转换为时间戳进行比较,在做的时候个人习惯使用chrome作为调试工具,代码基本完成之后,一切正常: 使用其他浏览器访问,好嘛,IE跟safari都不兼容,返回错误"Invalid Date". 想着估计是字符串格式的问题,改成'2016/11/11 11:11:11'再测试,结果正常,以为这样应该没问题了,

随机推荐