Skip to content

Commit d9c9583

Browse files
authored
Add context and severity params to ExtendedLogger#isEnabled (#7268)
1 parent 15ae8c0 commit d9c9583

File tree

14 files changed

+179
-71
lines changed

14 files changed

+179
-71
lines changed

api/incubator/src/main/java/io/opentelemetry/api/incubator/logs/ExtendedDefaultLogger.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ static Logger getNoop() {
2727
return INSTANCE;
2828
}
2929

30+
@Override
31+
public boolean isEnabled(Severity severity, Context context) {
32+
return false;
33+
}
34+
3035
@Override
3136
public ExtendedLogRecordBuilder logRecordBuilder() {
3237
return NOOP_LOG_RECORD_BUILDER;

api/incubator/src/main/java/io/opentelemetry/api/incubator/logs/ExtendedLogger.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,41 @@
66
package io.opentelemetry.api.incubator.logs;
77

88
import io.opentelemetry.api.logs.Logger;
9+
import io.opentelemetry.api.logs.Severity;
10+
import io.opentelemetry.context.Context;
911

1012
/** Extended {@link Logger} with experimental APIs. */
1113
public interface ExtendedLogger extends Logger {
1214

1315
/**
14-
* Returns {@code true} if the logger is enabled.
16+
* Returns {@code true} if the logger is enabled for the given {@code context} and {@code
17+
* severity}.
1518
*
1619
* <p>This allows callers to avoid unnecessary compute when nothing is consuming the data. Because
1720
* the response is subject to change over the application, callers should call this before each
1821
* call to {@link #logRecordBuilder()}.
1922
*/
20-
default boolean isEnabled() {
23+
default boolean isEnabled(Severity severity, Context context) {
2124
return true;
2225
}
2326

27+
/** Overload of {@link #isEnabled(Severity, Context)} assuming {@link Context#current()}. */
28+
default boolean isEnabled(Severity severity) {
29+
return isEnabled(severity, Context.current());
30+
}
31+
32+
/**
33+
* Overload of {@link #isEnabled(Severity, Context)} assuming {@link
34+
* Severity#UNDEFINED_SEVERITY_NUMBER} and {@link Context#current()}.
35+
*
36+
* @deprecated for removal after 1.55.0. Use {@link #isEnabled(Severity, Context)} or {@link
37+
* #isEnabled(Severity)} instead.
38+
*/
39+
@Deprecated
40+
default boolean isEnabled() {
41+
return isEnabled(Severity.UNDEFINED_SEVERITY_NUMBER);
42+
}
43+
2444
@Override
2545
ExtendedLogRecordBuilder logRecordBuilder();
2646
}

api/incubator/src/main/java/io/opentelemetry/api/incubator/metrics/ExtendedDefaultMeter.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ public BatchCallback batchCallback(
9494
private ExtendedDefaultMeter() {}
9595

9696
private static class NoopLongCounter implements ExtendedLongCounter {
97+
@Override
98+
public boolean isEnabled() {
99+
return false;
100+
}
101+
97102
@Override
98103
public void add(long value, Attributes attributes, Context context) {}
99104

@@ -105,6 +110,11 @@ public void add(long value) {}
105110
}
106111

107112
private static class NoopDoubleCounter implements ExtendedDoubleCounter {
113+
@Override
114+
public boolean isEnabled() {
115+
return false;
116+
}
117+
108118
@Override
109119
public void add(double value, Attributes attributes, Context context) {}
110120

@@ -186,6 +196,11 @@ public ObservableDoubleMeasurement buildObserver() {
186196
}
187197

188198
private static class NoopLongUpDownCounter implements ExtendedLongUpDownCounter {
199+
@Override
200+
public boolean isEnabled() {
201+
return false;
202+
}
203+
189204
@Override
190205
public void add(long value, Attributes attributes, Context context) {}
191206

@@ -197,6 +212,11 @@ public void add(long value) {}
197212
}
198213

199214
private static class NoopDoubleUpDownCounter implements ExtendedDoubleUpDownCounter {
215+
@Override
216+
public boolean isEnabled() {
217+
return false;
218+
}
219+
200220
@Override
201221
public void add(double value, Attributes attributes, Context context) {}
202222

@@ -281,6 +301,11 @@ public ObservableDoubleMeasurement buildObserver() {
281301
}
282302

283303
private static class NoopDoubleHistogram implements ExtendedDoubleHistogram {
304+
@Override
305+
public boolean isEnabled() {
306+
return false;
307+
}
308+
284309
@Override
285310
public void record(double value, Attributes attributes, Context context) {}
286311

@@ -292,6 +317,11 @@ public void record(double value) {}
292317
}
293318

294319
private static class NoopLongHistogram implements ExtendedLongHistogram {
320+
@Override
321+
public boolean isEnabled() {
322+
return false;
323+
}
324+
295325
@Override
296326
public void record(long value, Attributes attributes, Context context) {}
297327

@@ -385,6 +415,11 @@ public DoubleGauge build() {
385415
}
386416

387417
private static class NoopDoubleGauge implements ExtendedDoubleGauge {
418+
@Override
419+
public boolean isEnabled() {
420+
return false;
421+
}
422+
388423
@Override
389424
public void set(double value) {}
390425

@@ -426,6 +461,11 @@ public LongGauge build() {
426461
}
427462

428463
private static class NoopLongGauge implements ExtendedLongGauge {
464+
@Override
465+
public boolean isEnabled() {
466+
return false;
467+
}
468+
429469
@Override
430470
public void set(long value) {}
431471

api/incubator/src/main/java/io/opentelemetry/api/incubator/trace/ExtendedDefaultTracer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ static Tracer getNoop() {
3131
return INSTANCE;
3232
}
3333

34+
@Override
35+
public boolean isEnabled() {
36+
return false;
37+
}
38+
3439
@Override
3540
public ExtendedSpanBuilder spanBuilder(String spanName) {
3641
return NoopSpanBuilder.create();

api/incubator/src/test/java/io/opentelemetry/api/incubator/logs/ExtendedDefaultLoggerTest.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
import io.opentelemetry.api.common.Value;
1111
import io.opentelemetry.api.logs.Logger;
1212
import io.opentelemetry.api.logs.LoggerProvider;
13+
import io.opentelemetry.api.logs.Severity;
1314
import io.opentelemetry.api.testing.internal.AbstractDefaultLoggerTest;
15+
import io.opentelemetry.context.Context;
1416
import org.junit.jupiter.api.Test;
1517

1618
class ExtendedDefaultLoggerTest extends AbstractDefaultLoggerTest {
@@ -26,10 +28,18 @@ protected Logger getLogger() {
2628
}
2729

2830
@Test
31+
@SuppressWarnings("deprecation") // testing deprecated code
2932
void incubatingApiIsLoaded() {
3033
Logger logger = LoggerProvider.noop().get("test");
3134

32-
assertThat(logger).isInstanceOf(ExtendedLogger.class);
35+
assertThat(logger)
36+
.isInstanceOfSatisfying(
37+
ExtendedLogger.class,
38+
extendedLogger -> {
39+
assertThat(extendedLogger.isEnabled(Severity.ERROR, Context.current())).isFalse();
40+
assertThat(extendedLogger.isEnabled(Severity.ERROR)).isFalse();
41+
assertThat(extendedLogger.isEnabled()).isFalse();
42+
});
3343
ExtendedLogRecordBuilder builder = (ExtendedLogRecordBuilder) logger.logRecordBuilder();
3444
assertThat(builder).isInstanceOf(ExtendedLogRecordBuilder.class);
3545
assertThat(builder.setBody(Value.of(0))).isSameAs(builder);

api/incubator/src/test/java/io/opentelemetry/api/incubator/logs/ExtendedLogsBridgeApiUsageTest.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.opentelemetry.api.incubator.common.ExtendedAttributeKey;
1515
import io.opentelemetry.api.incubator.common.ExtendedAttributes;
1616
import io.opentelemetry.api.logs.Logger;
17+
import io.opentelemetry.api.logs.Severity;
1718
import io.opentelemetry.internal.testing.slf4j.SuppressLogger;
1819
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
1920
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
@@ -53,24 +54,26 @@ void loggerEnabled() {
5354
ExtendedLogger loggerB = (ExtendedLogger) loggerProvider.get("loggerB");
5455

5556
// Check if logger is enabled before emitting log and avoid unnecessary computation
56-
if (loggerA.isEnabled()) {
57+
if (loggerA.isEnabled(Severity.INFO)) {
5758
loggerA
5859
.logRecordBuilder()
60+
.setSeverity(Severity.INFO)
5961
.setBody("hello world!")
6062
.setAllAttributes(Attributes.builder().put("result", flipCoin()).build())
6163
.emit();
6264
}
63-
if (loggerB.isEnabled()) {
65+
if (loggerB.isEnabled(Severity.INFO)) {
6466
loggerB
6567
.logRecordBuilder()
68+
.setSeverity(Severity.INFO)
6669
.setBody("hello world!")
6770
.setAllAttributes(Attributes.builder().put("result", flipCoin()).build())
6871
.emit();
6972
}
7073

7174
// loggerA is enabled, loggerB is disabled
72-
assertThat(loggerA.isEnabled()).isTrue();
73-
assertThat(loggerB.isEnabled()).isFalse();
75+
assertThat(loggerA.isEnabled(Severity.INFO)).isTrue();
76+
assertThat(loggerB.isEnabled(Severity.INFO)).isFalse();
7477

7578
// Collected data only consists of logs from loggerA. Note, loggerB's logs would be
7679
// omitted from the results even if logs were emitted. The check if enabled simply avoids

api/incubator/src/test/java/io/opentelemetry/api/incubator/metrics/ExtendedDefaultMeterTest.java

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import io.opentelemetry.api.metrics.Meter;
1212
import io.opentelemetry.api.metrics.MeterProvider;
1313
import io.opentelemetry.api.testing.internal.AbstractDefaultMeterTest;
14-
import org.assertj.core.api.Assertions;
1514
import org.junit.jupiter.api.Test;
1615

1716
class ExtendedDefaultMeterTest extends AbstractDefaultMeterTest {
@@ -27,44 +26,53 @@ protected MeterProvider getMeterProvider() {
2726
}
2827

2928
@Test
30-
public void incubatingApiIsLoaded() {
29+
void incubatingApiIsLoaded() {
3130
Meter meter = MeterProvider.noop().get("test");
3231
assertThat(meter).isSameAs(OpenTelemetry.noop().getMeter("test"));
3332

34-
Assertions.assertThat(meter.gaugeBuilder("test").ofLongs())
35-
.isInstanceOf(ExtendedLongGaugeBuilder.class);
36-
Assertions.assertThat(meter.gaugeBuilder("test").ofLongs().build())
37-
.isInstanceOf(ExtendedLongGauge.class);
38-
Assertions.assertThat(meter.gaugeBuilder("test"))
39-
.isInstanceOf(ExtendedDoubleGaugeBuilder.class);
40-
Assertions.assertThat(meter.gaugeBuilder("test").build())
41-
.isInstanceOf(ExtendedDoubleGauge.class);
33+
assertThat(meter.gaugeBuilder("test").ofLongs()).isInstanceOf(ExtendedLongGaugeBuilder.class);
34+
assertThat(meter.gaugeBuilder("test").ofLongs().build())
35+
.isInstanceOfSatisfying(
36+
ExtendedLongGauge.class, instrument -> assertThat(instrument.isEnabled()).isFalse());
37+
assertThat(meter.gaugeBuilder("test")).isInstanceOf(ExtendedDoubleGaugeBuilder.class);
38+
assertThat(meter.gaugeBuilder("test").build())
39+
.isInstanceOfSatisfying(
40+
ExtendedDoubleGauge.class, instrument -> assertThat(instrument.isEnabled()).isFalse());
4241

43-
Assertions.assertThat(meter.histogramBuilder("test").ofLongs())
42+
assertThat(meter.histogramBuilder("test").ofLongs())
4443
.isInstanceOf(ExtendedLongHistogramBuilder.class);
45-
Assertions.assertThat(meter.histogramBuilder("test").ofLongs().build())
46-
.isInstanceOf(ExtendedLongHistogram.class);
47-
Assertions.assertThat(meter.histogramBuilder("test"))
48-
.isInstanceOf(ExtendedDoubleHistogramBuilder.class);
49-
Assertions.assertThat(meter.histogramBuilder("test").build())
50-
.isInstanceOf(ExtendedDoubleHistogram.class);
44+
assertThat(meter.histogramBuilder("test").ofLongs().build())
45+
.isInstanceOfSatisfying(
46+
ExtendedLongHistogram.class,
47+
instrument -> assertThat(instrument.isEnabled()).isFalse());
48+
assertThat(meter.histogramBuilder("test")).isInstanceOf(ExtendedDoubleHistogramBuilder.class);
49+
assertThat(meter.histogramBuilder("test").build())
50+
.isInstanceOfSatisfying(
51+
ExtendedDoubleHistogram.class,
52+
instrument -> assertThat(instrument.isEnabled()).isFalse());
5153

52-
Assertions.assertThat(meter.counterBuilder("test"))
53-
.isInstanceOf(ExtendedLongCounterBuilder.class);
54-
Assertions.assertThat(meter.counterBuilder("test").build())
55-
.isInstanceOf(ExtendedLongCounter.class);
56-
Assertions.assertThat(meter.counterBuilder("test").ofDoubles())
54+
assertThat(meter.counterBuilder("test")).isInstanceOf(ExtendedLongCounterBuilder.class);
55+
assertThat(meter.counterBuilder("test").build())
56+
.isInstanceOfSatisfying(
57+
ExtendedLongCounter.class, instrument -> assertThat(instrument.isEnabled()).isFalse());
58+
assertThat(meter.counterBuilder("test").ofDoubles())
5759
.isInstanceOf(ExtendedDoubleCounterBuilder.class);
58-
Assertions.assertThat(meter.counterBuilder("test").ofDoubles().build())
59-
.isInstanceOf(ExtendedDoubleCounter.class);
60+
assertThat(meter.counterBuilder("test").ofDoubles().build())
61+
.isInstanceOfSatisfying(
62+
ExtendedDoubleCounter.class,
63+
instrument -> assertThat(instrument.isEnabled()).isFalse());
6064

61-
Assertions.assertThat(meter.upDownCounterBuilder("test"))
65+
assertThat(meter.upDownCounterBuilder("test"))
6266
.isInstanceOf(ExtendedLongUpDownCounterBuilder.class);
63-
Assertions.assertThat(meter.upDownCounterBuilder("test").build())
64-
.isInstanceOf(ExtendedLongUpDownCounter.class);
65-
Assertions.assertThat(meter.upDownCounterBuilder("test").ofDoubles())
67+
assertThat(meter.upDownCounterBuilder("test").build())
68+
.isInstanceOfSatisfying(
69+
ExtendedLongUpDownCounter.class,
70+
instrument -> assertThat(instrument.isEnabled()).isFalse());
71+
assertThat(meter.upDownCounterBuilder("test").ofDoubles())
6672
.isInstanceOf(ExtendedDoubleUpDownCounterBuilder.class);
67-
Assertions.assertThat(meter.upDownCounterBuilder("test").ofDoubles().build())
68-
.isInstanceOf(ExtendedDoubleUpDownCounter.class);
73+
assertThat(meter.upDownCounterBuilder("test").ofDoubles().build())
74+
.isInstanceOfSatisfying(
75+
ExtendedDoubleUpDownCounter.class,
76+
instrument -> assertThat(instrument.isEnabled()).isFalse());
6977
}
7078
}

api/incubator/src/test/java/io/opentelemetry/api/incubator/trace/ExtendedDefaultTracerTest.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
package io.opentelemetry.api.incubator.trace;
77

88
import static org.assertj.core.api.Assertions.assertThat;
9+
import static org.mockito.Mockito.reset;
10+
import static org.mockito.Mockito.verify;
911

1012
import io.opentelemetry.api.OpenTelemetry;
1113
import io.opentelemetry.api.testing.internal.AbstractDefaultTracerTest;
@@ -27,39 +29,42 @@ public TracerProvider getTracerProvider() {
2729
}
2830

2931
@Test
30-
public void incubatingApiIsLoaded() {
32+
void incubatingApiIsLoaded() {
3133
Tracer tracer = TracerProvider.noop().get("test");
3234
assertThat(tracer).isSameAs(OpenTelemetry.noop().getTracer("test"));
3335

34-
assertThat(tracer).isInstanceOf(ExtendedTracer.class);
36+
assertThat(tracer)
37+
.isInstanceOfSatisfying(
38+
ExtendedTracer.class,
39+
extendedTracer -> assertThat(extendedTracer.isEnabled()).isFalse());
3540
assertThat(tracer.spanBuilder("test")).isInstanceOf(ExtendedSpanBuilder.class);
3641
}
3742

3843
@SuppressWarnings("unchecked")
3944
@Test
40-
public void incubatingApi() {
45+
void incubatingApi() {
4146
ExtendedSpanBuilder spanBuilder =
4247
(ExtendedSpanBuilder) ExtendedDefaultTracer.getNoop().spanBuilder("test");
4348
assertThat(spanBuilder.setParentFrom(null, null)).isSameAs(spanBuilder);
4449

4550
SpanRunnable<RuntimeException> spanRunnable = Mockito.mock(SpanRunnable.class);
4651

4752
spanBuilder.startAndRun(spanRunnable);
48-
Mockito.verify(spanRunnable).runInSpan();
49-
Mockito.reset(spanRunnable);
53+
verify(spanRunnable).runInSpan();
54+
reset(spanRunnable);
5055

5156
spanBuilder.startAndRun(spanRunnable, null);
52-
Mockito.verify(spanRunnable).runInSpan();
53-
Mockito.reset(spanRunnable);
57+
verify(spanRunnable).runInSpan();
58+
reset(spanRunnable);
5459

5560
SpanCallable<String, RuntimeException> spanCallable = Mockito.mock(SpanCallable.class);
5661

5762
spanBuilder.startAndCall(spanCallable);
58-
Mockito.verify(spanCallable).callInSpan();
59-
Mockito.reset(spanCallable);
63+
verify(spanCallable).callInSpan();
64+
reset(spanCallable);
6065

6166
spanBuilder.startAndCall(spanCallable, null);
62-
Mockito.verify(spanCallable).callInSpan();
63-
Mockito.reset(spanCallable);
67+
verify(spanCallable).callInSpan();
68+
reset(spanCallable);
6469
}
6570
}

0 commit comments

Comments
 (0)