From ae27a46bb420810d008370a8036f39fab5dfe95d Mon Sep 17 00:00:00 2001 From: Struchev Roman Date: Tue, 13 Feb 2024 11:13:01 +0100 Subject: [PATCH] Ability to disable log with level ERROR if key not exists --- .../featurehub/client/ClientFeatureRepository.java | 14 +++++++++----- .../main/java/todo/backend/FeatureHubSource.java | 4 +++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/client-java-core/src/main/java/io/featurehub/client/ClientFeatureRepository.java b/client-java-core/src/main/java/io/featurehub/client/ClientFeatureRepository.java index 513c429..c93d48f 100644 --- a/client-java-core/src/main/java/io/featurehub/client/ClientFeatureRepository.java +++ b/client-java-core/src/main/java/io/featurehub/client/ClientFeatureRepository.java @@ -35,6 +35,7 @@ public class ClientFeatureRepository extends AbstractFeatureRepository private ObjectMapper jsonConfigObjectMapper; private final ApplyFeature applyFeature; private boolean serverEvaluation = false; // the client tells us, we pass it out to others + private boolean logErrorIfKeyNotDefined = true; // log message with level ERROR if key is not defined private final TypeReference> FEATURE_LIST_TYPEDEF = new TypeReference>() {}; @@ -56,6 +57,11 @@ public ClientFeatureRepository(int threadPoolSize) { this(getExecutor(threadPoolSize), null); } + public ClientFeatureRepository(int threadPoolSize, boolean logErrorIfKeyNotDefined) { + this(threadPoolSize); + this.logErrorIfKeyNotDefined = logErrorIfKeyNotDefined; + } + public ClientFeatureRepository() { this(1); } @@ -248,13 +254,11 @@ public FeatureState getFeatureState(String key) { return features.computeIfAbsent( key, key1 -> { - if (hasReceivedInitialState) { - log.error( - "FeatureHub error: application requesting use of invalid key after initialization: `{}`", - key1); + if (hasReceivedInitialState && logErrorIfKeyNotDefined) { + log.error("FeatureHub error: application is requesting to use not defined key after initialization: `{}`", key1); } - return new FeatureStateBase(null, this, key); + return new FeatureStateBase(null, this, key1); }); } diff --git a/examples/todo-java/src/main/java/todo/backend/FeatureHubSource.java b/examples/todo-java/src/main/java/todo/backend/FeatureHubSource.java index d944290..5960ae5 100644 --- a/examples/todo-java/src/main/java/todo/backend/FeatureHubSource.java +++ b/examples/todo-java/src/main/java/todo/backend/FeatureHubSource.java @@ -28,6 +28,8 @@ public class FeatureHubSource implements FeatureHub { String analyticsCid = ""; @ConfigKey("feature-service.sdk") String clientSdk = "jersey3"; + @ConfigKey("feature-service.logs.error-if-key-not-defined") + boolean logErrorIfKeyNotDefined = true; private final FeatureRepositoryContext repository; private final EdgeFeatureHubConfig config; @@ -39,7 +41,7 @@ public FeatureHubSource() { config = new EdgeFeatureHubConfig(featureHubUrl, sdkKey); - repository = new ClientFeatureRepository(5); + repository = new ClientFeatureRepository(5, logErrorIfKeyNotDefined); repository.registerValueInterceptor(true, new SystemPropertyValueInterceptor()); if (analyticsCid.length() > 0 && analyticsKey.length() > 0) {