我试图让来自Feign rest客户端的每个请求的日志记录工作。但是我无法让日志工作,而标准' Slf4j日志记录确实有效。
我有以下内容:
public MyClient() {
initConnectionProperties();
this.service = Feign.builder()
.contract(new JAXRSContract())
.decoder(getJacksonDecoder())
.encoder(getJacksonEncoder())
.requestInterceptor(new BasicAuthRequestInterceptor(user, password))
//.client(new OkHttpClient())
.logger(new Slf4jLogger(MyClient.class)) //not working
.logLevel(feign.Logger.Level.BASIC)
.target(MyClient.class, this.url);
logger.info("Connection parameters: url = " + url + ", user = " + user); //Is working
}
答案 0 :(得分:7)
您需要在application.properties中配置日志记录,如下所示:
numm
如果您正在使用application.yml,那么:
logging.level.<package path>.MyClient=DEBUG
可以设置日志级别以告诉Feign记录多少。
选项包括:
示例:
logging.level.<package path>.MyClient: DEBUG
有关详细信息,请参阅this
答案 1 :(得分:4)
这就是我使用Custom Config类登录的方式
注意:伪装日志仅响应DEBUG级别。
配置类
@Configuration
public class UserClientConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.HEADERS;
}
}
客户
@FeignClient(name = "User", url = "http://localhost:8080",configuration=UserClientConfig.class)
public interface UserClient {
@RequestMapping(method = RequestMethod.GET, value = "/user")
List<User> getAllUsers();
}
application.properties
logging.level.<pcakgepath>.UserClient: DEBUG
答案 2 :(得分:3)
要启用日志记录,我们需要在 application.properties 文件中将包含我们的 feign 客户端的类或包的 Spring Boot 日志记录级别设置为 DEBUG:< /p>
logging.level.<packageName>.<className> = DEBUG
或者,如果我们有一个包含所有 feign 客户端的包,我们可以将其添加到整个包中:
logging.level.<packageName> = DEBUG
接下来,我们需要为 feign 客户端设置日志级别。请注意,上一步只是启用日志记录。
有四种日志级别可供选择:
我们可以通过java配置或在我们的属性文件中配置它们。
我们需要声明一个配置类,我们称之为FeignConfig:
public class FeignConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
之后,我们将配置类绑定到我们的假客户端类FooClient:
@FeignClient(name = "foo-client", configuration = FeignConfig.class)
public interface FooClient {
// methods for different requests
}
第二种方法是在我们的 application.properties 中设置它。让我们在这里引用我们的假客户端的名称,在我们的例子中是 foo-client:
feign.client.config.foo-client.loggerLevel = full
或者,我们可以覆盖所有 feign 客户端的默认配置级别:
feign.client.config.default.loggerLevel = full
答案 3 :(得分:1)
您可能还需要将feign
的log4j日志记录级别配置为DEBUG。如果您使用的是弹簧靴,对我有用的是:
curl -X POST http://localhost/loggers/feign -H 'Content-Type: application/json' -d '{"configuredLevel": "DEBUG"}'
答案 4 :(得分:1)
我没有设置客户端,客户端调用失败,并且日志记录无法正常工作。.一旦我添加OkHttpClient并更改了logback.xml文件,就可以正常工作
MyApi myApi = Feign.builder()
.client(new OkHttpClient())
.decoder(new JacksonDecoder())
.encoder(new JacksonEncoder())
.logger(new Slf4jLogger())
.logLevel(feign.Logger.Level.FULL)
.target(MyApi.class, "http://localhost:8082");
这是logback.xml
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d %green([%thread]) %highlight(%level) %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<logger name="feign.Logger" level="DEBUG" />
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
答案 5 :(得分:1)
以下代码更改在 kotlin 中对我有用:
import feign.Logger
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@Configuration
class FeignLoggingConfiguration {
@Bean
fun feignLoggerLevel(): Logger.Level {
return Logger.Level.HEADERS
}
}
在客户端添加这个配置类:
@FeignClient(name = "yourClient", url = "\${base-url}", configuration = [FeignLoggingConfiguration::class])
interface yourClient
注意:请确保 yourClient
类的日志记录级别为 DEBUG
feign 支持的登录级别:
无,无日志记录(默认)
BASIC,只记录请求方法和 URL 以及响应状态码和执行时间
HEADERS,记录基本信息以及请求和响应头
FULL,记录请求和响应的标头、正文和元数据
答案 6 :(得分:0)
private void setup() {
//...
feignBuilder.logger(new MyLogger());
feignBuilder.logLevel(Logger.Level.FULL);
}
private static class MyLogger extends Logger {
@Override
protected void log(String s, String s1, Object... objects) {
System.out.println(String.format(s + s1, objects)); // Change me!
}
}
答案 7 :(得分:0)
首先,您需要将伪客户端类的日志记录级别设置为DEBUG,正如Maverick在其答案中已经提到的那样。
然后,如果您使用Spring Boot,除了可以像在Niraj的答案中提到的那样创建@Configuration类的选项之外,还可以在应用程序属性/ yml配置文件中分别配置每个客户端:
feign:
client:
config:
the_name_of_your_feign_client:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: basic
或者使用default代替the_name_of_your_feign_client以相同的方式配置所有的假客户端:
feign:
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: basic