J'essaie de faire fonctionner la journalisation pour chaque demande d'un client de repos Feign. Cependant, je ne peux pas faire fonctionner la journalisation, alors que la journalisation Slf4j "standard" fonctionne.
J'ai ce qui suit:
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
}
Vous devez configurer la journalisation dans application.properties comme ci-dessous:
logging.level.<package path>.MyClient=DEBUG
Si vous utilisez application.yml, alors:
logging.level.<package path>.MyClient: DEBUG
Le niveau de journalisation peut être défini pour indiquer à Feign la quantité de journalisation.
Les options sont:
Exemple:
logLevel(feign.Logger.Level.NONE)
or
logLevel(feign.Logger.Level.BASIC)
or
logLevel(feign.Logger.Level.HEADERS)
or
logLevel(feign.Logger.Level.FULL)
Pour plus de détails, vous pouvez vous référer à this
Voici comment j'ai pu me connecter en utilisant la classe Custom Config
Remarque La journalisation feinte ne répond qu'au niveau DEBUG.
Classe de configuration
@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
Vous devez d'abord définir le niveau de journalisation de votre classe de clients feints sur DEBUG, comme Maverick l'a déjà mentionné dans sa réponse.
Ensuite, si vous utilisez Spring Boot, à côté de l'option pour créer des classes @Configuration comme Niraj déjà mentionné dans sa réponse, vous pouvez configurer chaque client individuellement dans votre fichier de configuration des propriétés de l'application/yml:
feign: client: config: the_name_of_your_feign_client: connectTimeout: 5000 readTimeout: 5000 loggerLevel: basic
Ou utilisez default au lieu de the_name_of_your_feign_client pour configurer tous vos clients feints de la même manière:
feign: client: config: default: connectTimeout: 5000 readTimeout: 5000 loggerLevel: basic
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!
}
}
Vous devrez peut-être également configurer votre niveau de journalisation log4j pour feign
vers DEBUG. Si vous utilisez une botte de printemps, ce qui a fonctionné pour moi est:
curl -X POST http://localhost/loggers/feign -H 'Content-Type: application/json' -d '{"configuredLevel": "DEBUG"}'