zoukankan      html  css  js  c++  java
  • 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自定义配置

  • 相关阅读:
    java高并发
    阿里网盘挂载到本地主机
    frp突破内网ip限制教程
    docker学习总结(流水线、redis集群、网络待)
    git\svn提交记录规范
    【寻径06】如何突破学习瓶颈学习笔记
    leetcode 每日一题解题859. 亲密字符串
    字符串格式的json字符串转换为json格式的字符串
    如何使用github发布自己的静态项目
    软考第一课总结考前介绍(1)
  • 原文地址:https://www.cnblogs.com/lkd934/p/9541417.html
Copyright © 2011-2022 走看看