open Feign日志输出

openFeign默认是没有日志输出的,只有在open Feign所在的包的级别达到debug才会有输出,而且级别有四级。

四种日志级别:

OpenFeign只会在FeignClient所在包的日志级别为DEBUG时,才会输出日志。而且其日志级别有4级:

  • NONE:不记录任何日志信息,这是默认值。

  • BASIC:仅记录请求的方法,URL以及响应状态码和执行时间

  • HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息

  • FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。

Feign默认的日志级别就是NONE,所以默认我们看不到请求日志。

如何设置日志级别?

一般情况有两种,一种是在配置文件设置,第二种是通过创建bean来实现

配置文件实现:

注意:如果是作为一个公共的模块,则不能使用配置文件来实现,配置文件需要springboot来启动和配置,但是公共模块并不需要启动类,所以client的公共模块只能通过创建bean实现

feign:
  httpclient:
    enabled: true
  client:
    config:
       default:
         logger-level: basic # 日志级别
         connect-timeout: 5000 # 连接超时 单位ms
         read-timeout: 5000 # 读取超时 单位ms

代码实现:

一般情况下basic用的最多

package com.heima.api.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * feign配置类
 */
@Configuration
public class DefaultFeignConfig {
    /**
     * feign日志级别
     * @Logger.Level
     * BASIC: 响应状态行和请求和响应的头信息
     * @return
     */
    @Bean
    public Logger.Level defaultFeignLoggerLevel() {
        return Logger.Level.BASIC; // 日志级别 ,可以切换为其他的
    }
}

配置完之后,并没有生效,在之前编写扫包的时候也没有扫到config包,所以需要在调用open Feign的服务启动类上多加一个扫描项,生效区域有局部和全局

局部:

在api中针对某个服务进行配置

全局:

在调用api服务的启动类上添加全局配置,在这个服务中调取的所有服务,全部生效

### Feign 日志配置与使用示例 Feign 是一个声明式的 HTTP 客户端,常用于微服务架构中的服务间调用。为了更好地调试和监控 Feign 请求,可以通过配置日志级别来记录请求和响应的详细信息。 以下是一个完整的 Feign 日志配置与使用的示例: #### 1. 配置全局日志级别 在 `application.yml` 或 `application.properties` 文件中,可以为 Feign 配置全局日志级别。例如: ```yaml logging: level: com.example.feign: DEBUG # 替换为你的 Feign 客户端所在包名 feign: client: config: default: logger-level: FULL # 设置全局日志级别为 FULL ``` 这里的 `com.example.feign` 应替换为实际项目中 Feign 客户端所在的包名。日志级别 `FULL` 表示记录所有请求和响应的详细信息[^3]。 #### 2. 针对特定服务配置日志级别 如果只需要为某个特定的服务启用详细的日志记录,可以单独配置该服务的日志级别。例如: ```yaml feign: client: config: user-service: # 替换为实际的服务名称 logger-level: FULL # 设置该服务的日志级别为 FULL ``` 这样,只有名为 `user-service` 的服务会记录完整的日志信息,而其他服务则保持默认的日志级别[^3]。 #### 3. 使用代码配置日志级别 除了通过配置文件设置日志级别外,还可以通过 Java 代码进行配置。例如: ```java @Configuration public class FeignLoggerConfig { @Bean public Logger.Level feignLoggerLevel() { return Logger.Level.FULL; // 设置日志级别为 FULL } } ``` 这段代码会在 Spring 容器中注册一个 `Logger.Level` Bean,从而为 Feign 客户端设置日志级别[^2]。 #### 4. 自定义日志记录器 如果需要自定义日志记录逻辑,可以实现 `feign.Logger` 接口并覆盖其方法。例如: ```java import feign.Logger; import java.util.logging.Level; public class CustomFeignLogger extends Logger { @Override protected void logRequest(String configKey, Level logLevel, Request request) { if (this.logger.isDebugEnabled()) { // 判断是否为 debug 级别 super.logRequest(configKey, logLevel, request); } } @Override protected Response logAndRebufferResponse(String configKey, Level logLevel, Response response, long elapsedTime) { if (this.logger.isDebugEnabled()) { // 判断是否为 debug 级别 return super.logAndRebufferResponse(configKey, logLevel, response, elapsedTime); } return response; } } ``` 然后在配置类中注册自定义的日志记录器: ```java @Configuration public class FeignConfig { @Bean public Logger.Customizer feignLoggerCustomizer() { return (loggerType, logger) -> { if ("feign".equals(loggerType)) { logger.setLevel(Level.FULL); // 设置日志级别 } }; } } ``` #### 5. 注意事项 - Feign 默认使用 `feign.slf4j.Slf4jLogger` 类打印日志,只有在 `debug` 级别下才会输出日志信息[^1]。 - 如果日志输出过多,可能会对性能产生影响,建议在生产环境中谨慎使用 `FULL` 日志级别。 --- ### 示例代码 以下是一个完整的 Feign 客户端配置示例: ```java import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @FeignClient(name = "user-service", url = "http://localhost:8080") public interface UserClient { @GetMapping("/users/{id}") String getUserById(@PathVariable("id") String id); } ``` 结合上述配置,Feign 将会记录所有与 `user-service` 相关的请求和响应日志。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值