diff --git a/api/all/src/main/java/io/opentelemetry/api/internal/Utils.java b/api/all/src/main/java/io/opentelemetry/api/internal/Utils.java index 3742e0f6ebe..21761c71f48 100644 --- a/api/all/src/main/java/io/opentelemetry/api/internal/Utils.java +++ b/api/all/src/main/java/io/opentelemetry/api/internal/Utils.java @@ -5,6 +5,8 @@ package io.opentelemetry.api.internal; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.annotation.concurrent.Immutable; /** @@ -30,4 +32,17 @@ public static void checkArgument(boolean isValid, String errorMessage) { throw new IllegalArgumentException(errorMessage); } } + + /** + * Logs a warning message if the argument is false. + * + * @param logger the logger instance that writes message. + * @param isValid whether the argument check passed. + * @param warnMessage the message to use for the warning log. + */ + public static void warnOnArgument(Logger logger, boolean isValid, String warnMessage) { + if (!isValid) { + logger.log(Level.WARNING, warnMessage); + } + } } diff --git a/api/all/src/test/java/io/opentelemetry/api/internal/UtilsTest.java b/api/all/src/test/java/io/opentelemetry/api/internal/UtilsTest.java index 5609ba6bcb3..ff714ae1b1d 100644 --- a/api/all/src/test/java/io/opentelemetry/api/internal/UtilsTest.java +++ b/api/all/src/test/java/io/opentelemetry/api/internal/UtilsTest.java @@ -6,7 +6,12 @@ package io.opentelemetry.api.internal; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import java.util.logging.Level; +import java.util.logging.Logger; import org.junit.jupiter.api.Test; class UtilsTest { @@ -19,4 +24,11 @@ void checkArgument() { .isInstanceOf(IllegalArgumentException.class) .hasMessage(TEST_MESSAGE); } + + @Test + void warnOnArgument() { + Logger logger = mock(Logger.class); + Utils.warnOnArgument(logger, false, TEST_MESSAGE); + verify(logger, times(1)).log(Level.WARNING, TEST_MESSAGE); + } } diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/export/BatchLogRecordProcessorBuilder.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/export/BatchLogRecordProcessorBuilder.java index 4cf30586367..942422c1ebc 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/export/BatchLogRecordProcessorBuilder.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/export/BatchLogRecordProcessorBuilder.java @@ -6,11 +6,13 @@ package io.opentelemetry.sdk.logs.export; import static io.opentelemetry.api.internal.Utils.checkArgument; +import static io.opentelemetry.api.internal.Utils.warnOnArgument; import static java.util.Objects.requireNonNull; import io.opentelemetry.api.metrics.MeterProvider; import java.time.Duration; import java.util.concurrent.TimeUnit; +import java.util.logging.Logger; /** * Builder class for {@link BatchLogRecordProcessor}. @@ -18,6 +20,8 @@ * @since 1.27.0 */ public final class BatchLogRecordProcessorBuilder { + private static final Logger logger = + Logger.getLogger(BatchLogRecordProcessorBuilder.class.getName()); // Visible for testing static final long DEFAULT_SCHEDULE_DELAY_MILLIS = 1000; @@ -101,6 +105,10 @@ long getExporterTimeoutNanos() { * @see BatchLogRecordProcessorBuilder#DEFAULT_MAX_QUEUE_SIZE */ public BatchLogRecordProcessorBuilder setMaxQueueSize(int maxQueueSize) { + warnOnArgument( + logger, + maxExportBatchSize <= maxQueueSize, + "maxExportBatchSize should not exceed maxQueueSize."); this.maxQueueSize = maxQueueSize; return this; } @@ -122,6 +130,10 @@ int getMaxQueueSize() { */ public BatchLogRecordProcessorBuilder setMaxExportBatchSize(int maxExportBatchSize) { checkArgument(maxExportBatchSize > 0, "maxExportBatchSize must be positive."); + warnOnArgument( + logger, + maxExportBatchSize <= maxQueueSize, + "maxExportBatchSize should not exceed maxQueueSize."); this.maxExportBatchSize = maxExportBatchSize; return this; } diff --git a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/export/BatchSpanProcessorBuilder.java b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/export/BatchSpanProcessorBuilder.java index 3ec3fce0778..51db4be97c9 100644 --- a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/export/BatchSpanProcessorBuilder.java +++ b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/export/BatchSpanProcessorBuilder.java @@ -6,14 +6,17 @@ package io.opentelemetry.sdk.trace.export; import static io.opentelemetry.api.internal.Utils.checkArgument; +import static io.opentelemetry.api.internal.Utils.warnOnArgument; import static java.util.Objects.requireNonNull; import io.opentelemetry.api.metrics.MeterProvider; import java.time.Duration; import java.util.concurrent.TimeUnit; +import java.util.logging.Logger; /** Builder class for {@link BatchSpanProcessor}. */ public final class BatchSpanProcessorBuilder { + private static final Logger logger = Logger.getLogger(BatchSpanProcessorBuilder.class.getName()); // Visible for testing static final long DEFAULT_SCHEDULE_DELAY_MILLIS = 5000; @@ -109,6 +112,10 @@ long getExporterTimeoutNanos() { * @see BatchSpanProcessorBuilder#DEFAULT_MAX_QUEUE_SIZE */ public BatchSpanProcessorBuilder setMaxQueueSize(int maxQueueSize) { + warnOnArgument( + logger, + maxExportBatchSize <= maxQueueSize, + "maxExportBatchSize should not exceed maxQueueSize."); this.maxQueueSize = maxQueueSize; return this; } @@ -130,6 +137,10 @@ int getMaxQueueSize() { */ public BatchSpanProcessorBuilder setMaxExportBatchSize(int maxExportBatchSize) { checkArgument(maxExportBatchSize > 0, "maxExportBatchSize must be positive."); + warnOnArgument( + logger, + maxExportBatchSize <= maxQueueSize, + "maxExportBatchSize should not exceed maxQueueSize."); this.maxExportBatchSize = maxExportBatchSize; return this; }