在项目中当使用openFeign 调用远程接口,当接口联调时可能需要对feign 接口调用的情况进行日志打印。
logging:
level:
com.example.springmvctest.feign.api: debug
其中 : com.example.springmvctest.feign.api 为 feign 接口对应的包路径,设置级别为debug/trace,demo 如下:
应的包路径的日志级别为什么要是debug/trace 设置 为 info 或者error 不行吗?
Feign 日志系统的行为取决于两个方面:Feign 日志级别和日志框架(如 SLF4J 与 Logback、Log4J2等)的具体配置。
Feign 的日志级别(NONE
、BASIC
、HEADERS
、FULL
)决定了Feign 中记录哪些信息的范围。通过 Logger.Level
设置,你可以控制Feign生成的日志信息的多少,但这并不直接影响日志的输出。具体的输出则是由你的日志框架配置决定的。
当你的日志配置文件(比如 logback.xml 或 application.properties)中为Feign客户端设置的日志级别为 INFO
、ERROR
时,这意味着只会输出那些等级的日志消息。由于Feign 日志的记录通常是为了调试目的,要记录Feign的HTTP请求和响应细节,你必须将日志级别至少设置为 DEBUG
:
logging.level.com.yourclient.package=DEBUG
INFO
级别通常意味着相对不太详细的操作消息,通常用于记录应用程序的运行状态,而不是用于调试目的。如果你将日志级别设置为 INFO
或更高的 ERROR
,而Feign的日志级别设置为 BASIC
、HEADERS
或 FULL
,你将不会看到通过Feign发送的HTTP请求的具体细节,因为这些信息通常以 DEBUG
或 TRACE
级别记录。
所以,为了使用Feign的日志记录功能,你应该设置日志级别至少为 DEBUG
,使得Feign可以输出更详细的日志信息供调试。这是行业常规做法,尤其在开发和测试过程中。在生产环境中,你可能出于性能和日志磁盘空间的考虑,会将日志级别调整为 INFO
或 ERROR
,此时Feign的详细日志就不会输出了。
方式 1:通过配置文件设置:
feign:
client:
config:
applicationname:
logger-level: full
其中 applicationname 为feign 接口对应的 name 名称。demo 如下:
方式 2:通过java 代码设置:
import feign.Logger;
import org.springframework.context.annotation.Bean;
public class SyncFeignConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.NONE;
}
}
在feign 接口中引入改配置文件:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = "applicationname", url = "http://www.baidu.com",configuration = SyncFeignConfig.class)
public interface SyncFeignService {
@GetMapping("/s")
String search(@RequestParam("wd") String wd);
}
如果 同时 通过配置文件设置 和java 设置了日志级别,则 配置文件设置 会覆盖java 代码的设置;
Feign 是一个声明式的 HTTP 客户端,它使得编写 HTTP 客户端服务变得更容易。Feign 提供了日志功能,使得开发者可以看到 HTTP 请求的完整周期和详细信息,帮助调试和跟踪请求。Feign 提供了不同级别的日志记录,分别是:
NONE
:不记录任何日志(默认值)。BASIC
:仅记录请求方法和URL以及响应状态码和执行时间。HEADERS
:记录基本信息加上请求和响应的头信息。FULL
:记录请求和响应的头信息、正文和元数据。这些日志级别的不同之处在于它们所包含的信息量。下面详细介绍每个级别:
NONE
不记录任何日志。如果选择此级别,所有的Feign调用都将不会被记录。
BASIC
记录请求方法、URL、响应状态码以及请求的执行时间。例如:
[main] DEBUG feign.Logger - [UserService#getUser] ---> GET http://myapi/user/12345 HTTP/1.1
[main] DEBUG feign.Logger - [UserService#getUser] <--- HTTP/1.1 200 OK (145ms)
[main] DEBUG feign.Logger - [UserService#getUser] ---> GET http://myapi/user/12345 HTTP/1.1
Host: myapi
Content-Type: application/json
[main] DEBUG feign.Logger - [UserService#getUser] <--- HTTP/1.1 200 OK (145ms)
Content-Length: 17
Content-Type: application/json
[main] DEBUG feign.Logger - [UserService#getUser] ---> GET http://myapi/user/12345 HTTP/1.1
Host: myapi
Content-Type: application/json
[main] DEBUG feign.Logger - [UserService#getUser] <--- HTTP/1.1 200 OK (145ms)
Content-Length: 17
Content-Type: application/json
{"name":"John Doe","id":"12345"}
选择日志级别通常取决于你需要调试的问题的复杂性以及你希望收集多少信息来分析。在生产环境中,通常建议使用NONE或BASIC来减少日志记录对性能的影响和过多的日志信息。在开发或测试环境中,如果需要更详细的调试信息,可以考虑使用HEADERS或FULL。
本文列举了在使用openFeign 怎么对日志的输出进行设置。