I'm trying to get logging working for each request from a Feign rest client. However I cannot get the logging to work, while 'standard' Slf4j logging does work.
I have the following:
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
}
You need to configure logging in application.properties as below:
logging.level.<package path>.MyClient=DEBUG
If you're using application.yml then:
logging.level.<package path>.MyClient: DEBUG
The log level can be set to tell Feign how much to log.
Options are:
Example:
logLevel(feign.Logger.Level.NONE)
or
logLevel(feign.Logger.Level.BASIC)
or
logLevel(feign.Logger.Level.HEADERS)
or
logLevel(feign.Logger.Level.FULL)
For more details, you can refer this
This is how i was able to log using Custom Config class
Note Feign logging only responds to the DEBUG level.
Config Class
@Configuration
public class UserClientConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.HEADERS;
}
}
Client
@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
First you need to set the logging level for your feign client class to DEBUG, as Maverick already mentioned in his answer.
Then if you use Spring Boot, beside the option to create @Configuration classes as Niraj already mentioned in his answer, you can configure each client individually in you application properties/yml config file:
feign:
client:
config:
the_name_of_your_feign_client:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: basic
Or use default instead of the_name_of_your_feign_client to configure all your feign clients in the same way:
feign:
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: basic