web-dev-qa-db-fra.com

Feindre la journalisation ne fonctionne pas

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
    }
12
Magick

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:

  • AUCUN, aucune journalisation (PAR DÉFAUT)
  • BASIC, journal uniquement la méthode de demande et l'URL et le code d'état de réponse et le temps d'exécution
  • EN-TÊTES, enregistrez les informations de base ainsi que les en-têtes de demande et de réponse
  • COMPLET, enregistrez les en-têtes, le corps et les métadonnées pour les demandes et les réponses

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

8
Maverick

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
7
Niraj Sonawane

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

2
Roland
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!
    }
}
1

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"}'
1
Stimp