Skip to content

Commit a90a864

Browse files
feat: jul to slf4j (#458)
Signed-off-by: Kavindu Dodanduwa <[email protected]>
1 parent 7aee884 commit a90a864

File tree

9 files changed

+65
-74
lines changed

9 files changed

+65
-74
lines changed

Diff for: providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/InProcessResolver.java

+14-14
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
package dev.openfeature.contrib.providers.flagd.resolver.process;
22

3-
import static dev.openfeature.contrib.providers.flagd.resolver.process.model.FeatureFlag.EMPTY_TARGETING_STRING;
4-
5-
import java.util.concurrent.atomic.AtomicBoolean;
6-
import java.util.function.Consumer;
7-
import java.util.logging.Level;
8-
93
import dev.openfeature.contrib.providers.flagd.FlagdOptions;
104
import dev.openfeature.contrib.providers.flagd.resolver.Resolver;
115
import dev.openfeature.contrib.providers.flagd.resolver.common.Util;
@@ -24,13 +18,18 @@
2418
import dev.openfeature.sdk.exceptions.FlagNotFoundError;
2519
import dev.openfeature.sdk.exceptions.ParseError;
2620
import dev.openfeature.sdk.exceptions.TypeMismatchError;
27-
import lombok.extern.java.Log;
21+
import lombok.extern.slf4j.Slf4j;
22+
23+
import java.util.concurrent.atomic.AtomicBoolean;
24+
import java.util.function.Consumer;
25+
26+
import static dev.openfeature.contrib.providers.flagd.resolver.process.model.FeatureFlag.EMPTY_TARGETING_STRING;
2827

2928
/**
3029
* flagd in-process resolver. Resolves feature flags in-process. Flags are retrieved from {@link Storage}, where the
3130
* {@link Storage} maintain flag configurations obtained from known source.
3231
*/
33-
@Log
32+
@Slf4j
3433
public class InProcessResolver implements Resolver {
3534
private final Storage flagStore;
3635
private final Consumer<ProviderState> stateConsumer;
@@ -70,11 +69,11 @@ public void init() throws Exception {
7069
case STALE:
7170
// todo set stale state
7271
default:
73-
log.log(Level.INFO, String.format("Storage emitted unhandled status: %s", storageState));
72+
log.info(String.format("Storage emitted unhandled status: %s", storageState));
7473
}
7574
}
7675
} catch (InterruptedException e) {
77-
log.log(Level.WARNING, "Storage state watcher interrupted", e);
76+
log.warn("Storage state watcher interrupted", e);
7877
}
7978
});
8079
stateWatcher.setDaemon(true);
@@ -86,8 +85,9 @@ public void init() throws Exception {
8685

8786
/**
8887
* Shutdown in-process resolver.
88+
*
8989
* @throws InterruptedException if stream can't be closed within deadline.
90-
*/
90+
*/
9191
public void shutdown() throws InterruptedException {
9292
flagStore.shutdown();
9393
this.connected.set(false);
@@ -174,7 +174,7 @@ private <T> ProviderEvaluation<T> resolve(Class<T> type, String key,
174174
}
175175
} catch (TargetingRuleException e) {
176176
String message = String.format("error evaluating targeting rule for flag %s", key);
177-
log.log(Level.FINE, message, e);
177+
log.debug(message, e);
178178
throw new ParseError(message);
179179
}
180180
}
@@ -183,13 +183,13 @@ private <T> ProviderEvaluation<T> resolve(Class<T> type, String key,
183183
Object value = flag.getVariants().get(resolvedVariant);
184184
if (value == null) {
185185
String message = String.format("variant %s not found in flag with key %s", resolvedVariant, key);
186-
log.log(Level.FINE, message);
186+
log.debug(message);
187187
throw new TypeMismatchError(message);
188188
}
189189

190190
if (!type.isAssignableFrom(value.getClass()) || !(resolvedVariant instanceof String)) {
191191
String message = "returning default variant for flagKey: %s, type not valid";
192-
log.log(Level.FINE, String.format(message, key));
192+
log.debug(String.format(message, key));
193193
throw new TypeMismatchError(message);
194194
}
195195

Diff for: providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/model/FlagParser.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import com.networknt.schema.SpecVersion;
99
import com.networknt.schema.ValidationMessage;
1010
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
11-
import lombok.extern.java.Log;
11+
import lombok.extern.slf4j.Slf4j;
1212

1313
import java.io.ByteArrayOutputStream;
1414
import java.io.IOException;
@@ -17,13 +17,12 @@
1717
import java.util.Iterator;
1818
import java.util.Map;
1919
import java.util.Set;
20-
import java.util.logging.Level;
2120
import java.util.regex.Pattern;
2221

2322
/**
2423
* flagd feature flag configuration parser.
2524
*/
26-
@Log
25+
@Slf4j
2726
@SuppressFBWarnings(value = {"EI_EXPOSE_REP"},
2827
justification = "Feature flag comes as a Json configuration, hence they must be exposed")
2928
public class FlagParser {
@@ -42,7 +41,7 @@ public class FlagParser {
4241
static {
4342
try (InputStream schema = FlagParser.class.getClassLoader().getResourceAsStream(SCHEMA_RESOURCE)) {
4443
if (schema == null) {
45-
log.log(Level.WARNING, String.format("Resource %s not found", SCHEMA_RESOURCE));
44+
log.warn(String.format("Resource %s not found", SCHEMA_RESOURCE));
4645
} else {
4746
final ByteArrayOutputStream result = new ByteArrayOutputStream();
4847
byte[] buffer = new byte[512];
@@ -55,8 +54,7 @@ public class FlagParser {
5554
}
5655
} catch (Throwable e) {
5756
// log only, do not throw
58-
log.log(Level.WARNING,
59-
String.format("Error loading resource %s, schema validation will be skipped", SCHEMA_RESOURCE), e);
57+
log.warn(String.format("Error loading resource %s, schema validation will be skipped", SCHEMA_RESOURCE), e);
6058
}
6159
}
6260

Diff for: providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/FlagStore.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import dev.openfeature.contrib.providers.flagd.resolver.process.storage.connector.Connector;
66
import dev.openfeature.contrib.providers.flagd.resolver.process.storage.connector.StreamPayload;
77
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
8-
import lombok.extern.java.Log;
8+
import lombok.extern.slf4j.Slf4j;
99

1010
import java.util.HashMap;
1111
import java.util.Map;
@@ -15,12 +15,11 @@
1515
import java.util.concurrent.locks.ReentrantReadWriteLock;
1616
import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
1717
import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
18-
import java.util.logging.Level;
1918

2019
/**
2120
* Feature flag storage.
2221
*/
23-
@Log
22+
@Slf4j
2423
@SuppressFBWarnings(value = {"EI_EXPOSE_REP"},
2524
justification = "Feature flag comes as a Json configuration, hence they must be exposed")
2625
public class FlagStore implements Storage {
@@ -47,7 +46,7 @@ public void init() {
4746
try {
4847
streamerListener(connector);
4948
} catch (InterruptedException e) {
50-
log.log(Level.WARNING, "connection listener failed", e);
49+
log.warn("connection listener failed", e);
5150
}
5251
});
5352
streamer.setDaemon(true);
@@ -56,6 +55,7 @@ public void init() {
5655

5756
/**
5857
* Shutdown storage layer.
58+
*
5959
* @throws InterruptedException if stream can't be closed within deadline.
6060
*/
6161
public void shutdown() throws InterruptedException {
@@ -102,27 +102,27 @@ private void streamerListener(final Connector connector) throws InterruptedExcep
102102
writeLock.unlock();
103103
}
104104
if (!stateBlockingQueue.offer(StorageState.OK)) {
105-
log.log(Level.WARNING, "Failed to convey OK satus, queue is full");
105+
log.warn("Failed to convey OK satus, queue is full");
106106
}
107107
} catch (Throwable e) {
108108
// catch all exceptions and avoid stream listener interruptions
109-
log.log(Level.WARNING, "Invalid flag sync payload from connector", e);
109+
log.warn("Invalid flag sync payload from connector", e);
110110
if (!stateBlockingQueue.offer(StorageState.STALE)) {
111-
log.log(Level.WARNING, "Failed to convey STALE satus, queue is full");
111+
log.warn("Failed to convey STALE satus, queue is full");
112112
}
113113
}
114114
break;
115115
case ERROR:
116116
if (!stateBlockingQueue.offer(StorageState.ERROR)) {
117-
log.log(Level.WARNING, "Failed to convey ERROR satus, queue is full");
117+
log.warn("Failed to convey ERROR satus, queue is full");
118118
}
119119
break;
120120
default:
121-
log.log(Level.INFO, String.format("Payload with unknown type: %s", take.getType()));
121+
log.info(String.format("Payload with unknown type: %s", take.getType()));
122122
}
123123
}
124124

125-
log.log(Level.INFO, "Shutting down store stream listener");
125+
log.info("Shutting down store stream listener");
126126
}
127127

128128
}

Diff for: providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamConnector.java

+9-11
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,18 @@
99
import dev.openfeature.flagd.sync.SyncService;
1010
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
1111
import io.grpc.ManagedChannel;
12-
import lombok.extern.java.Log;
12+
import lombok.extern.slf4j.Slf4j;
1313

1414
import java.util.Random;
1515
import java.util.concurrent.BlockingQueue;
1616
import java.util.concurrent.LinkedBlockingQueue;
1717
import java.util.concurrent.TimeUnit;
1818
import java.util.concurrent.atomic.AtomicBoolean;
19-
import java.util.logging.Level;
2019

2120
/**
2221
* Implements the {@link Connector} contract and emit flags obtained from flagd sync gRPC contract.
2322
*/
24-
@Log
23+
@Slf4j
2524
@SuppressFBWarnings(value = {"PREDICTABLE_RANDOM", "EI_EXPOSE_REP"},
2625
justification = "Random is used to generate a variation & flag configurations require exposing")
2726
public class GrpcStreamConnector implements Connector {
@@ -66,7 +65,7 @@ public void init() {
6665

6766
observeEventStream(blockingQueue, shutdown, serviceStub, requestBuilder.build());
6867
} catch (InterruptedException e) {
69-
log.log(Level.WARNING, "gRPC event stream interrupted, flag configurations are stale", e);
68+
log.warn("gRPC event stream interrupted, flag configurations are stale", e);
7069
}
7170
});
7271

@@ -100,7 +99,7 @@ public void shutdown() throws InterruptedException {
10099
if (this.channel != null && !this.channel.isShutdown()) {
101100
this.channel.shutdownNow();
102101
this.channel.awaitTermination(this.deadline, TimeUnit.MILLISECONDS);
103-
log.warning(String.format("Unable to shut down channel by %d deadline", this.deadline));
102+
log.warn(String.format("Unable to shut down channel by %d deadline", this.deadline));
104103
}
105104
}
106105
}
@@ -129,13 +128,12 @@ static void observeEventStream(final BlockingQueue<StreamPayload> writeTo,
129128
}
130129

131130
if (response.getError() != null) {
132-
log.log(Level.WARNING,
133-
String.format("Error from grpc connection, retrying in %dms", retryDelay),
131+
log.warn(String.format("Error from grpc connection, retrying in %dms", retryDelay),
134132
response.getError());
135133

136134
if (!writeTo.offer(
137135
new StreamPayload(StreamPayloadType.ERROR, "Error from stream connection, retrying"))) {
138-
log.log(Level.WARNING, "Failed to convey ERROR satus, queue is full");
136+
log.warn("Failed to convey ERROR satus, queue is full");
139137
}
140138
break;
141139
}
@@ -145,7 +143,7 @@ static void observeEventStream(final BlockingQueue<StreamPayload> writeTo,
145143
case SYNC_STATE_ALL:
146144
if (!writeTo.offer(
147145
new StreamPayload(StreamPayloadType.DATA, flagsResponse.getFlagConfiguration()))) {
148-
log.log(Level.WARNING, "Stream writing failed");
146+
log.warn("Stream writing failed");
149147
}
150148
break;
151149
case SYNC_STATE_UNSPECIFIED:
@@ -165,7 +163,7 @@ static void observeEventStream(final BlockingQueue<StreamPayload> writeTo,
165163

166164
// check for shutdown and avoid sleep
167165
if (shutdown.get()) {
168-
log.log(Level.INFO, "Shutdown invoked, exiting event stream listener");
166+
log.info("Shutdown invoked, exiting event stream listener");
169167
return;
170168
}
171169

@@ -178,6 +176,6 @@ static void observeEventStream(final BlockingQueue<StreamPayload> writeTo,
178176
}
179177

180178
// log as this can happen after awakened from backoff sleep
181-
log.log(Level.INFO, "Shutdown invoked, exiting event stream listener");
179+
log.info("Shutdown invoked, exiting event stream listener");
182180
}
183181
}

Diff for: providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/grpc/GrpcStreamHandler.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22

33
import dev.openfeature.flagd.sync.SyncService;
44
import io.grpc.stub.StreamObserver;
5-
import lombok.extern.java.Log;
5+
import lombok.extern.slf4j.Slf4j;
66

77
import java.util.concurrent.BlockingQueue;
8-
import java.util.logging.Level;
98

10-
@Log
9+
@Slf4j
1110
class GrpcStreamHandler implements StreamObserver<SyncService.SyncFlagsResponse> {
1211
private final BlockingQueue<GrpcResponseModel> blockingQueue;
1312

@@ -18,21 +17,21 @@ class GrpcStreamHandler implements StreamObserver<SyncService.SyncFlagsResponse>
1817
@Override
1918
public void onNext(SyncService.SyncFlagsResponse syncFlagsResponse) {
2019
if (!blockingQueue.offer(new GrpcResponseModel(syncFlagsResponse))) {
21-
log.log(Level.WARNING, "failed to write sync response to queue");
20+
log.warn("failed to write sync response to queue");
2221
}
2322
}
2423

2524
@Override
2625
public void onError(Throwable throwable) {
2726
if (!blockingQueue.offer(new GrpcResponseModel(throwable))) {
28-
log.log(Level.WARNING, "failed to write error response to queue");
27+
log.warn("failed to write error response to queue");
2928
}
3029
}
3130

3231
@Override
3332
public void onCompleted() {
3433
if (!blockingQueue.offer(new GrpcResponseModel(true))) {
35-
log.log(Level.WARNING, "failed to write complete status to queue");
34+
log.warn("failed to write complete status to queue");
3635
}
3736
}
3837
}

Diff for: providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,15 @@
44
import io.github.jamsesso.jsonlogic.evaluator.JsonLogicEvaluationException;
55
import io.github.jamsesso.jsonlogic.evaluator.expressions.PreEvaluatedArgumentsExpression;
66
import lombok.Getter;
7-
import lombok.extern.java.Log;
7+
import lombok.extern.slf4j.Slf4j;
88
import org.apache.commons.codec.digest.MurmurHash3;
99

1010
import java.nio.charset.StandardCharsets;
1111
import java.util.ArrayList;
1212
import java.util.Arrays;
1313
import java.util.List;
14-
import java.util.logging.Level;
1514

16-
@Log
15+
@Slf4j
1716
class Fractional implements PreEvaluatedArgumentsExpression {
1817

1918
public String key() {
@@ -42,7 +41,7 @@ public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationEx
4241
} else {
4342
// fallback to targeting key if present
4443
if (properties.getTargetingKey() == null) {
45-
log.log(Level.FINE, "Missing fallback targeting key");
44+
log.debug("Missing fallback targeting key");
4645
return null;
4746
}
4847

@@ -61,12 +60,12 @@ public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationEx
6160
distribution += fractionProperty.getPercentage();
6261
}
6362
} catch (JsonLogicException e) {
64-
log.log(Level.FINE, "Error parsing fractional targeting rule", e);
63+
log.debug("Error parsing fractional targeting rule", e);
6564
return null;
6665
}
6766

6867
if (distribution != 100) {
69-
log.log(Level.FINE, "Fractional properties do not sum to 100");
68+
log.debug("Fractional properties do not sum to 100");
7069
return null;
7170
}
7271

0 commit comments

Comments
 (0)