我正在尝试为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
}
Run Code Online (Sandbox Code Playgroud)
Rol*_*and 10
首先,您需要将 feign 客户端类的日志记录级别设置为 DEBUG,正如 Maverick 在他的回答中已经提到的那样。
然后,如果您使用 Spring Boot,除了创建 @Configuration 类的选项之外,Niraj 在他的回答中已经提到,您可以在应用程序属性/yml 配置文件中单独配置每个客户端:
feign:
client:
config:
the_name_of_your_feign_client:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: basic
或者使用 default 而不是 the_name_of_your_feign_client 以相同的方式配置所有 feign 客户端:
feign:
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: basic
您需要按以下方式在application.properties中配置日志记录:
logging.level.<package path>.MyClient=DEBUG
Run Code Online (Sandbox Code Playgroud)
如果您使用的是application.yml,则:
logging.level.<package path>.MyClient: DEBUG
Run Code Online (Sandbox Code Playgroud)
日志级别可以设置为告诉Feign要记录多少。
选项有:
例:
logLevel(feign.Logger.Level.NONE)
or
logLevel(feign.Logger.Level.BASIC)
or
logLevel(feign.Logger.Level.HEADERS)
or
logLevel(feign.Logger.Level.FULL)
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,您可以参考此
这就是我能够使用Custom Config类登录的方式
注意虚拟日志仅响应DEBUG级别。
配置类
@Configuration
public class UserClientConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.HEADERS;
}
}
Run Code Online (Sandbox Code Playgroud)
客户
@FeignClient(name = "User", url = "http://localhost:8080",configuration=UserClientConfig.class)
public interface UserClient {
@RequestMapping(method = RequestMethod.GET, value = "/user")
List<User> getAllUsers();
}
Run Code Online (Sandbox Code Playgroud)
application.properties
logging.level.<pcakgepath>.UserClient: DEBUG
Run Code Online (Sandbox Code Playgroud)
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!
}
}
Run Code Online (Sandbox Code Playgroud)
我没有设置客户端,并且我的客户端调用失败,并且日志记录不起作用..一旦我添加了 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");
Run Code Online (Sandbox Code Playgroud)
这是 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>
Run Code Online (Sandbox Code Playgroud)
您可能还需要将 log4j 日志记录级别配置为feignDEBUG。如果您使用的是 Spring Boot,对我有用的是:
curl -X POST http://localhost/loggers/feign -H 'Content-Type: application/json' -d '{"configuredLevel": "DEBUG"}'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16455 次 |
| 最近记录: |