私は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
}
以下のようにapplication.propertiesでロギングを構成する必要があります。
logging.level.<package path>.MyClient=DEBUG
Application.ymlを使用している場合:
logging.level.<package path>.MyClient: DEBUG
ログレベルは、ログに記録する量をFeignに伝えるように設定できます。
オプションは次のとおりです。
例:
logLevel(feign.Logger.Level.NONE)
or
logLevel(feign.Logger.Level.BASIC)
or
logLevel(feign.Logger.Level.HEADERS)
or
logLevel(feign.Logger.Level.FULL)
詳細については、 this を参照してください。
これは、カスタム構成クラスを使用してログを記録できた方法です
注偽のログは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
Maverickが回答で既に述べたように、まず、偽のクライアントクラスのログレベルをDEBUGに設定する必要があります。
次に、Spring Bootを使用する場合、Nirajが回答で既に述べたように@Configurationクラスを作成するオプションの横に、アプリケーションプロパティ/ yml構成ファイルで各クライアントを個別に構成できます。
feign: client: config: the_name_of_your_feign_client: connectTimeout: 5000 readTimeout: 5000 loggerLevel: basic
または、the_name_of_your_feign_clientの代わりにデフォルトを使用して、すべての偽のクライアントを同じように構成します。
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!
}
}
また、feign
のlog4jロギングレベルをDEBUGに設定する必要がある場合があります。あなたがスプリングブーツを使用している場合、私のために働いたのは:
curl -X POST http://localhost/loggers/feign -H 'Content-Type: application/json' -d '{"configuredLevel": "DEBUG"}'