spring cloud netfix组件中,feign相关的日志默认是不会输出的,须要自定义配置才能输出,而且Feign只对Debug基本的日志作出响应, 实际业务须要输出Info级别的日志,因此须要作自定义配置,覆盖相关配置Bean。html
Feign客户端能够配置各类的Logger.Level对象,告诉Feign记录哪些日志。Logger.Level的值有如下选择。spring
NONE,无记录(DEFAULT)。app
BASIC,只记录请求方法和URL以及响应状态代码和执行时间。ide
HEADERS,记录基本信息以及请求和响应标头。ui
FULL,记录请求和响应的头文件,正文和元数据。this
根据Feign配置的描述,须要将Logger.Level 配置到客户端中:spa
@Configuration public class FeignClientConfig { @Bean Logger.Level feignLoggerLevel() { return Logger.Level.FULL; } }
@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); }
由于feign只对日志级别为debug级别作出响应,因此若是须要打印出日志,还须要修改客户端的日志级别在application.properties中要设定一行这样的配置:
logging.level.<你的feign client全路径类名>: DEBUG
操做完成这三步骤,当调用Send 方法的时候就会打印出Debug级别的日志。debug
在实际生产环境中,咱们经常须要使用Info级别日志,使用上述针对对每一个客户端的配置进行修改,那样将会有大量的配置。因此,须要将修改Feign的日志,对Info级别进行相应。日志
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修改为为Infoorm
@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自定义配置。