Feign输出Info级别日志

背景

  spring cloud netfix组件中,feign相关的日志默认是不会输出的,需要自定义配置才能输出,并且Feign只对Debug基本的日志做出响应, 实际业务需要输出Info级别的日志,所以需要做自定义配置,覆盖相关配置Bean。

Feign配置

  Feign客户端可以配置各种的Logger.Level对象,告诉Feign记录哪些日志。Logger.Level的值有以下选择。

 

    NONE,无记录(DEFAULT)。

 

    BASIC,只记录请求方法和URL以及响应状态代码和执行时间。

 

    HEADERS,记录基本信息以及请求和响应标头。

 

    FULL,记录请求和响应的头文件,正文和元数据。

打印Feign日志

  1、Feign的配置类

    根据Feign配置的描述,需要将Logger.Level 配置到客户端中:

复制代码

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

复制代码

  2、在客户端中修改@FeignClient注解

 

复制代码

@FeignClient(name = "qex-comsrv", fallback = ComsrvHystrix.class, configuration = { FeignClientConfig.class })
  public abstract interface ComsrvFeignApi{
        @RequestMapping({"/otp/esgMsg/send.do"})
          public abstract JSONObject send(OTPRequest otprequest);
        
  }

复制代码

  3、修改客户端的日志打印级别

    因为feign只对日志级别为debug级别做出响应,所以如果需要打印出日志,还需要修改客户端的日志级别在application.properties中要设定一行这样的配置:
        logging.level.<你的feign client全路径类名>: DEBUG
    操作完成这三步骤,当调用Send 方法的时候就会打印出Debug级别的日志。

打印Info级别日志

  在实际生产环境中,我们常常需要使用Info级别日志,使用上述针对对每个客户端的配置进行修改,那样将会有大量的配置。所以,需要将修改Feign的日志,对Info级别进行相应。

  1、重写feign.logger类

复制代码

public class QjxFeignLogger extends feign.Logger {

        private final Logger logger;

        public QjxFeignLogger() {
            this(feign.Logger.class);
          }

        public QjxFeignLogger(Class<?> clazz) {
            this(LoggerFactory.getLogger(clazz));
          }

        public QjxFeignLogger(String name) {
            this(LoggerFactory.getLogger(name));
          }

        QjxFeignLogger(Logger logger) {
            this.logger = logger;
          }
        
        
        @Override
        protected void logRequest(String configKey, Level logLevel, Request request) {
                if (logger.isInfoEnabled()) {
                        super.logRequest(configKey, logLevel, request);
                }
        }

        @Override
        protected Response logAndRebufferResponse(String configKey, Level logLevel, Response response, long elapsedTime)
                        throws IOException {
                if (logger.isInfoEnabled()) {
                        return super.logAndRebufferResponse(configKey, logLevel, response, elapsedTime);
                }
                return response;
        }

        @Override
        protected void log(String configKey, String format, Object... args) {
                // Not using SLF4J's support for parameterized messages (even though it
                // would be more efficient) because it would
                // require the incoming message formats to be SLF4J-specific.
                if (logger.isInfoEnabled()) {
                        logger.info(String.format(methodTag(configKey) + format, args));
                }
        }
}

复制代码

  自定义一个Logger类,继承Feign.Logger,将代码中的Debug修改成为Info

  2、自定义Logger类加入配置

复制代码

@Configuration
  public class FeignClientConfig {
        @Bean
        Logger.Level feignLoggerLevel() {
                return Logger.Level.FULL;
        }
        
        @Bean
        Logger QjxFeign(){
                return new QjxFeignLogger();
        }   
  }

复制代码

  将自定义Logger类加入到Feign客户端配置的Config中,这样Feign系统间调用就能打印出Info级别的日志。

总结

  打印出Feign系统间调用Info级别的日志,核心的思想是Spring Boot项目中,能够自定义配置,自定义的配置优先级大于默认的配置。详情参见Spring Boot自定义配置

转载于:https://my.oschina.net/xiaominmin/blog/3053167

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值