diff --git a/README.md b/README.md index b83df080fa..3929bae251 100644 --- a/README.md +++ b/README.md @@ -221,11 +221,12 @@ dependency as follows, replacing `{{artifact-id}}` with the value from the "Arti ### API -| Component | Description | Artifact ID | Version | -|-----------------------------------|----------------------------------------------------------------|-------------------------|-------------------------------------------------------------| -| [API](./api/all) | OpenTelemetry API, including metrics, traces, baggage, context | `opentelemetry-api` | 1.18.0 | -| [Context API](./context) | OpenTelemetry context API | `opentelemetry-context` | 1.18.0 | -| [Semantic Conventions](./semconv) | Generated code for OpenTelemetry semantic conventions | `opentelemetry-semconv` | 1.18.0-alpha | +| Component | Description | Artifact ID | Version | +|-----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------|----------------------------------------------------------------------------------| +| [API](./api/all) | OpenTelemetry API, including metrics, traces, baggage, context | `opentelemetry-api` | 1.18.0 | +| [Logs API](./api/logs) | OpenTelemetry Log API for emitting events and bridging log frameworks (NOT a replacement for application logging frameworks like SLF4J, JUL, etc.) | `opentelemetry-api-logs` | TODO: add version after published | +| [Context API](./context) | OpenTelemetry context API | `opentelemetry-context` | 1.18.0 | +| [Semantic Conventions](./semconv) | Generated code for OpenTelemetry semantic conventions | `opentelemetry-semconv` | 1.18.0-alpha | ### API Extensions diff --git a/api/logs/build.gradle.kts b/api/logs/build.gradle.kts new file mode 100644 index 0000000000..db0a7514c4 --- /dev/null +++ b/api/logs/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + id("otel.java-conventions") + id("otel.publish-conventions") + + id("otel.animalsniffer-conventions") +} + +description = "OpenTelemetry Logs API" +otelJava.moduleName.set("io.opentelemetry.api.logs") + +dependencies { + api(project(":api:all")) +} diff --git a/api/logs/gradle.properties b/api/logs/gradle.properties new file mode 100644 index 0000000000..bbcbb89622 --- /dev/null +++ b/api/logs/gradle.properties @@ -0,0 +1 @@ +otel.release=alpha \ No newline at end of file diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/NoopLoggerBuilder.java b/api/logs/src/main/java/io/opentelemetry/api/logs/DefaultLogger.java similarity index 53% rename from sdk/logs/src/main/java/io/opentelemetry/sdk/logs/NoopLoggerBuilder.java rename to api/logs/src/main/java/io/opentelemetry/api/logs/DefaultLogger.java index da4384ae59..2fbd6b72d7 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/NoopLoggerBuilder.java +++ b/api/logs/src/main/java/io/opentelemetry/api/logs/DefaultLogger.java @@ -3,53 +3,31 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.sdk.logs; +package io.opentelemetry.api.logs; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.context.Context; -import io.opentelemetry.sdk.logs.data.Severity; import java.time.Instant; import java.util.concurrent.TimeUnit; -class NoopLoggerBuilder implements LoggerBuilder { +class DefaultLogger implements Logger { - private static final NoopLoggerBuilder INSTANCE = new NoopLoggerBuilder(); - private static final NoopLogger NOOP_LOGGER = new NoopLogger(); + private static final Logger INSTANCE = new DefaultLogger(); - private NoopLoggerBuilder() {} + private static final LogRecordBuilder NOOP_LOG_RECORD_BUILDER = new NoopLogRecordBuilder(); - static LoggerBuilder getInstance() { + private DefaultLogger() {} + + static Logger getInstance() { return INSTANCE; } @Override - public LoggerBuilder setSchemaUrl(String schemaUrl) { - return this; + public LogRecordBuilder logRecordBuilder() { + return NOOP_LOG_RECORD_BUILDER; } - @Override - public LoggerBuilder setInstrumentationVersion(String instrumentationScopeVersion) { - return this; - } - - @Override - public Logger build() { - return NOOP_LOGGER; - } - - private static class NoopLogger implements Logger { - - private static final NoopLogRecordBuilder NOOP_LOG_BUILDER = new NoopLogRecordBuilder(); - - private NoopLogger() {} - - @Override - public LogRecordBuilder logRecordBuilder() { - return NOOP_LOG_BUILDER; - } - } - - private static class NoopLogRecordBuilder implements LogRecordBuilder { + private static final class NoopLogRecordBuilder implements LogRecordBuilder { private NoopLogRecordBuilder() {} diff --git a/api/logs/src/main/java/io/opentelemetry/api/logs/DefaultLoggerProvider.java b/api/logs/src/main/java/io/opentelemetry/api/logs/DefaultLoggerProvider.java new file mode 100644 index 0000000000..25a18f529b --- /dev/null +++ b/api/logs/src/main/java/io/opentelemetry/api/logs/DefaultLoggerProvider.java @@ -0,0 +1,43 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.api.logs; + +class DefaultLoggerProvider implements LoggerProvider { + + private static final LoggerProvider INSTANCE = new DefaultLoggerProvider(); + private static final LoggerBuilder NOOP_BUILDER = new NoopLoggerBuilder(); + + private DefaultLoggerProvider() {} + + static LoggerProvider getInstance() { + return INSTANCE; + } + + @Override + public LoggerBuilder loggerBuilder(String instrumentationScopeName) { + return NOOP_BUILDER; + } + + private static class NoopLoggerBuilder implements LoggerBuilder { + + private NoopLoggerBuilder() {} + + @Override + public LoggerBuilder setSchemaUrl(String schemaUrl) { + return this; + } + + @Override + public LoggerBuilder setInstrumentationVersion(String instrumentationVersion) { + return this; + } + + @Override + public Logger build() { + return DefaultLogger.getInstance(); + } + } +} diff --git a/api/logs/src/main/java/io/opentelemetry/api/logs/GlobalLoggerProvider.java b/api/logs/src/main/java/io/opentelemetry/api/logs/GlobalLoggerProvider.java new file mode 100644 index 0000000000..de341adf83 --- /dev/null +++ b/api/logs/src/main/java/io/opentelemetry/api/logs/GlobalLoggerProvider.java @@ -0,0 +1,34 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.api.logs; + +import io.opentelemetry.api.GlobalOpenTelemetry; + +/** + * This class provides a temporary global accessor for {@link LoggerProvider} until the log API is + * marked stable. It will eventually be merged into {@link GlobalOpenTelemetry}. + */ +public final class GlobalLoggerProvider { + + private static volatile LoggerProvider globalLoggerProvider = DefaultLoggerProvider.getInstance(); + + private GlobalLoggerProvider() {} + + /** Returns the globally registered {@link LoggerProvider}. */ + public static LoggerProvider get() { + return globalLoggerProvider; + } + + /** + * Sets the global {@link LoggerProvider}. Future calls to {@link #get()} will return the provided + * {@link LoggerProvider} instance. This should be called once as early as possible in your + * application initialization logic. + */ + public static void set(LoggerProvider loggerProvider) { + globalLoggerProvider = + loggerProvider == null ? DefaultLoggerProvider.getInstance() : loggerProvider; + } +} diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogRecordBuilder.java b/api/logs/src/main/java/io/opentelemetry/api/logs/LogRecordBuilder.java similarity index 85% rename from sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogRecordBuilder.java rename to api/logs/src/main/java/io/opentelemetry/api/logs/LogRecordBuilder.java index 03e2befcf8..4a479520ad 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogRecordBuilder.java +++ b/api/logs/src/main/java/io/opentelemetry/api/logs/LogRecordBuilder.java @@ -3,20 +3,19 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.sdk.logs; +package io.opentelemetry.api.logs; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.context.Context; -import io.opentelemetry.sdk.logs.data.Severity; import java.time.Instant; import java.util.concurrent.TimeUnit; /** - * Used to construct and emit logs from a {@link Logger}. + * Used to construct and emit log records from a {@link Logger}. * *
Obtain a {@link Logger#logRecordBuilder()}, add properties using the setters, and emit the log
- * to downstream {@link LogProcessor}(s) by calling {@link #emit()}.
+ * record by calling {@link #emit()}.
*/
public interface LogRecordBuilder {
@@ -55,6 +54,6 @@ public interface LogRecordBuilder {
/** Sets an attribute. */
Obtain a {@link #logRecordBuilder()}, add properties using the setters, and emit it to
- * downstream {@link LogProcessor}(s) via {@link LogRecordBuilder#emit()}.
+ * Obtain a {@link #logRecordBuilder()}, add properties using the setters, and emit it via {@link
+ * LogRecordBuilder#emit()}.
*/
@ThreadSafe
public interface Logger {
@@ -19,8 +19,12 @@ public interface Logger {
/**
* Return a {@link LogRecordBuilder} to emit a log record.
*
- * Build the log record using the {@link LogRecordBuilder} setters, and emit it to downstream
- * {@link LogProcessor}(s) via {@link LogRecordBuilder#emit()}.
+ * IMPORTANT: this should be used to write appenders to bridge logs from logging
+ * frameworks (e.g. SLF4J, Log4j, JUL, Logback, etc). It is NOT a replacement for an
+ * application logging framework, and should not be used by application developers.
+ *
+ * Build the log record using the {@link LogRecordBuilder} setters, and emit via {@link
+ * LogRecordBuilder#emit()}.
*/
LogRecordBuilder logRecordBuilder();
}
diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LoggerBuilder.java b/api/logs/src/main/java/io/opentelemetry/api/logs/LoggerBuilder.java
similarity index 96%
rename from sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LoggerBuilder.java
rename to api/logs/src/main/java/io/opentelemetry/api/logs/LoggerBuilder.java
index d725d8cbd8..cf3d781823 100644
--- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LoggerBuilder.java
+++ b/api/logs/src/main/java/io/opentelemetry/api/logs/LoggerBuilder.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.sdk.logs;
+package io.opentelemetry.api.logs;
/** Builder class for creating {@link Logger} instances. */
public interface LoggerBuilder {
diff --git a/api/logs/src/main/java/io/opentelemetry/api/logs/LoggerProvider.java b/api/logs/src/main/java/io/opentelemetry/api/logs/LoggerProvider.java
new file mode 100644
index 0000000000..a748a59009
--- /dev/null
+++ b/api/logs/src/main/java/io/opentelemetry/api/logs/LoggerProvider.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.api.logs;
+
+import javax.annotation.concurrent.ThreadSafe;
+
+/**
+ * A registry for creating scoped {@link Logger}s. The name Provider is for consistency with
+ * other languages and it is NOT loaded using reflection.
+ *
+ * The OpenTelemetry logging API exists to satisfy two use cases:
+ *
+ *
+ *
+ *
+ * @see Logger
+ */
+@ThreadSafe
+public interface LoggerProvider {
+
+ /**
+ * Gets or creates a named Logger instance.
+ *
+ * @param instrumentationScopeName A name uniquely identifying the instrumentation scope, such as
+ * the instrumentation library, package, or fully qualified class name. Must not be null.
+ * @return a Logger instance.
+ */
+ default Logger get(String instrumentationScopeName) {
+ return loggerBuilder(instrumentationScopeName).build();
+ }
+
+ /**
+ * Creates a LoggerBuilder for a named Logger instance.
+ *
+ * @param instrumentationScopeName A name uniquely identifying the instrumentation scope, such as
+ * the instrumentation library, package, or fully qualified class name. Must not be null.
+ * @return a LoggerBuilder instance.
+ */
+ LoggerBuilder loggerBuilder(String instrumentationScopeName);
+
+ /** Returns a no-op {@link LoggerProvider} which provides Loggers which do not record or emit. */
+ static LoggerProvider noop() {
+ return DefaultLoggerProvider.getInstance();
+ }
+}
diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/Severity.java b/api/logs/src/main/java/io/opentelemetry/api/logs/Severity.java
similarity index 94%
rename from sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/Severity.java
rename to api/logs/src/main/java/io/opentelemetry/api/logs/Severity.java
index bea09c2166..91b4d825a9 100644
--- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/Severity.java
+++ b/api/logs/src/main/java/io/opentelemetry/api/logs/Severity.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.sdk.logs.data;
+package io.opentelemetry.api.logs;
public enum Severity {
UNDEFINED_SEVERITY_NUMBER(0),
diff --git a/api/logs/src/test/java/io/opentelemetry/api/logs/DefaultLoggerProviderTest.java b/api/logs/src/test/java/io/opentelemetry/api/logs/DefaultLoggerProviderTest.java
new file mode 100644
index 0000000000..c4ca0fa415
--- /dev/null
+++ b/api/logs/src/test/java/io/opentelemetry/api/logs/DefaultLoggerProviderTest.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.api.logs;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatCode;
+
+import org.junit.jupiter.api.Test;
+
+class DefaultLoggerProviderTest {
+
+ @Test
+ void noopLoggerProvider_doesNotThrow() {
+ LoggerProvider provider = LoggerProvider.noop();
+
+ assertThat(provider).isSameAs(DefaultLoggerProvider.getInstance());
+ assertThatCode(() -> provider.get("scope-name")).doesNotThrowAnyException();
+ assertThatCode(
+ () ->
+ provider
+ .loggerBuilder("scope-name")
+ .setInstrumentationVersion("1.0")
+ .setSchemaUrl("http://schema.com")
+ .build())
+ .doesNotThrowAnyException();
+ ;
+ }
+}
diff --git a/api/logs/src/test/java/io/opentelemetry/api/logs/DefaultLoggerTest.java b/api/logs/src/test/java/io/opentelemetry/api/logs/DefaultLoggerTest.java
new file mode 100644
index 0000000000..bf4522f51e
--- /dev/null
+++ b/api/logs/src/test/java/io/opentelemetry/api/logs/DefaultLoggerTest.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.api.logs;
+
+import static org.assertj.core.api.Assertions.assertThatCode;
+
+import io.opentelemetry.api.common.AttributeKey;
+import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.context.Context;
+import java.time.Instant;
+import java.util.concurrent.TimeUnit;
+import org.junit.jupiter.api.Test;
+
+class DefaultLoggerTest {
+
+ private static final Logger logger = DefaultLogger.getInstance();
+
+ @Test
+ void buildAndEmit() {
+ assertThatCode(
+ () ->
+ logger
+ .logRecordBuilder()
+ .setEpoch(100, TimeUnit.SECONDS)
+ .setEpoch(Instant.now())
+ .setContext(Context.root())
+ .setSeverity(Severity.DEBUG)
+ .setSeverityText("debug")
+ .setBody("body")
+ .setAttribute(AttributeKey.stringKey("key1"), "value1")
+ .setAllAttributes(Attributes.builder().put("key2", "value2").build())
+ .emit())
+ .doesNotThrowAnyException();
+ }
+}
diff --git a/exporters/logging-otlp/src/test/java/io/opentelemetry/exporter/logging/otlp/OtlpJsonLoggingLogExporterTest.java b/exporters/logging-otlp/src/test/java/io/opentelemetry/exporter/logging/otlp/OtlpJsonLoggingLogExporterTest.java
index 21086cc858..75df9c0f5a 100644
--- a/exporters/logging-otlp/src/test/java/io/opentelemetry/exporter/logging/otlp/OtlpJsonLoggingLogExporterTest.java
+++ b/exporters/logging-otlp/src/test/java/io/opentelemetry/exporter/logging/otlp/OtlpJsonLoggingLogExporterTest.java
@@ -12,13 +12,13 @@ import static org.assertj.core.api.Assertions.assertThat;
import io.github.netmikey.logunit.api.LogCapturer;
import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.logs.Severity;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.internal.testing.slf4j.SuppressLogger;
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
import io.opentelemetry.sdk.logs.data.LogData;
-import io.opentelemetry.sdk.logs.data.Severity;
import io.opentelemetry.sdk.logs.export.LogExporter;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.testing.logs.TestLogData;
diff --git a/exporters/logging/src/test/java/io/opentelemetry/exporter/logging/SystemOutLogExporterTest.java b/exporters/logging/src/test/java/io/opentelemetry/exporter/logging/SystemOutLogExporterTest.java
index b77a2330f0..4df86a61e8 100644
--- a/exporters/logging/src/test/java/io/opentelemetry/exporter/logging/SystemOutLogExporterTest.java
+++ b/exporters/logging/src/test/java/io/opentelemetry/exporter/logging/SystemOutLogExporterTest.java
@@ -11,13 +11,13 @@ import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.logs.Severity;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
import io.opentelemetry.sdk.logs.data.LogData;
-import io.opentelemetry.sdk.logs.data.Severity;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.testing.logs.TestLogData;
import java.time.LocalDateTime;
diff --git a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/internal/otlp/logs/LogMarshaler.java b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/internal/otlp/logs/LogMarshaler.java
index 23b0855805..212059d3a7 100644
--- a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/internal/otlp/logs/LogMarshaler.java
+++ b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/internal/otlp/logs/LogMarshaler.java
@@ -5,6 +5,7 @@
package io.opentelemetry.exporter.internal.otlp.logs;
+import io.opentelemetry.api.logs.Severity;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.SpanId;
import io.opentelemetry.api.trace.TraceFlags;
@@ -17,7 +18,6 @@ import io.opentelemetry.exporter.internal.otlp.KeyValueMarshaler;
import io.opentelemetry.exporter.internal.otlp.StringAnyValueMarshaler;
import io.opentelemetry.proto.logs.v1.internal.LogRecord;
import io.opentelemetry.proto.logs.v1.internal.SeverityNumber;
-import io.opentelemetry.sdk.logs.data.Severity;
import java.io.IOException;
import javax.annotation.Nullable;
diff --git a/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/internal/otlp/logs/LogsRequestMarshalerTest.java b/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/internal/otlp/logs/LogsRequestMarshalerTest.java
index e8ecde905c..b42d8cbc81 100644
--- a/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/internal/otlp/logs/LogsRequestMarshalerTest.java
+++ b/exporters/otlp/common/src/test/java/io/opentelemetry/exporter/internal/otlp/logs/LogsRequestMarshalerTest.java
@@ -14,6 +14,7 @@ import com.google.protobuf.util.JsonFormat;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.internal.OtelEncodingUtils;
+import io.opentelemetry.api.logs.Severity;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.SpanId;
import io.opentelemetry.api.trace.TraceFlags;
@@ -27,7 +28,6 @@ import io.opentelemetry.proto.logs.v1.LogRecord;
import io.opentelemetry.proto.logs.v1.ResourceLogs;
import io.opentelemetry.proto.logs.v1.ScopeLogs;
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
-import io.opentelemetry.sdk.logs.data.Severity;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.testing.logs.TestLogData;
import java.io.ByteArrayOutputStream;
diff --git a/exporters/otlp/logs/src/test/java/io/opentelemetry/exporter/otlp/http/logs/OtlpHttpLogExporterTest.java b/exporters/otlp/logs/src/test/java/io/opentelemetry/exporter/otlp/http/logs/OtlpHttpLogExporterTest.java
index 227792df62..924d7c704b 100644
--- a/exporters/otlp/logs/src/test/java/io/opentelemetry/exporter/otlp/http/logs/OtlpHttpLogExporterTest.java
+++ b/exporters/otlp/logs/src/test/java/io/opentelemetry/exporter/otlp/http/logs/OtlpHttpLogExporterTest.java
@@ -22,6 +22,7 @@ import com.linecorp.armeria.testing.junit5.server.mock.MockWebServerExtension;
import com.linecorp.armeria.testing.junit5.server.mock.RecordedRequest;
import io.github.netmikey.logunit.api.LogCapturer;
import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.logs.Severity;
import io.opentelemetry.exporter.internal.okhttp.OkHttpExporter;
import io.opentelemetry.exporter.internal.otlp.logs.ResourceLogsMarshaler;
import io.opentelemetry.exporter.internal.retry.RetryPolicy;
@@ -33,7 +34,6 @@ import io.opentelemetry.proto.logs.v1.ResourceLogs;
import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
import io.opentelemetry.sdk.logs.data.LogData;
-import io.opentelemetry.sdk.logs.data.Severity;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.testing.logs.TestLogData;
import java.io.ByteArrayOutputStream;
diff --git a/exporters/otlp/logs/src/test/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcLogExporterTest.java b/exporters/otlp/logs/src/test/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcLogExporterTest.java
index 712eed6c51..6138584ec8 100644
--- a/exporters/otlp/logs/src/test/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcLogExporterTest.java
+++ b/exporters/otlp/logs/src/test/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcLogExporterTest.java
@@ -9,6 +9,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.logs.Severity;
import io.opentelemetry.exporter.internal.grpc.OkHttpGrpcExporter;
import io.opentelemetry.exporter.internal.marshal.Marshaler;
import io.opentelemetry.exporter.internal.otlp.logs.ResourceLogsMarshaler;
@@ -19,7 +20,6 @@ import io.opentelemetry.exporter.otlp.testing.internal.TelemetryExporterBuilder;
import io.opentelemetry.proto.logs.v1.ResourceLogs;
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
import io.opentelemetry.sdk.logs.data.LogData;
-import io.opentelemetry.sdk.logs.data.Severity;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.testing.logs.TestLogData;
import java.io.Closeable;
diff --git a/exporters/otlp/logs/src/testGrpcNetty/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcNettyLogExporterTest.java b/exporters/otlp/logs/src/testGrpcNetty/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcNettyLogExporterTest.java
index 57190d8907..3683d80848 100644
--- a/exporters/otlp/logs/src/testGrpcNetty/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcNettyLogExporterTest.java
+++ b/exporters/otlp/logs/src/testGrpcNetty/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcNettyLogExporterTest.java
@@ -10,6 +10,7 @@ import static org.assertj.core.api.Assertions.assertThatCode;
import io.grpc.inprocess.InProcessChannelBuilder;
import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.logs.Severity;
import io.opentelemetry.exporter.internal.grpc.UpstreamGrpcExporter;
import io.opentelemetry.exporter.internal.marshal.Marshaler;
import io.opentelemetry.exporter.internal.otlp.logs.ResourceLogsMarshaler;
@@ -21,7 +22,6 @@ import io.opentelemetry.exporter.otlp.testing.internal.TelemetryExporterBuilder;
import io.opentelemetry.proto.logs.v1.ResourceLogs;
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
import io.opentelemetry.sdk.logs.data.LogData;
-import io.opentelemetry.sdk.logs.data.Severity;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.testing.logs.TestLogData;
import java.io.Closeable;
diff --git a/exporters/otlp/logs/src/testGrpcNettyShaded/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcNettyShadedLogExporterTest.java b/exporters/otlp/logs/src/testGrpcNettyShaded/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcNettyShadedLogExporterTest.java
index 4cfa0cf236..755bda0790 100644
--- a/exporters/otlp/logs/src/testGrpcNettyShaded/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcNettyShadedLogExporterTest.java
+++ b/exporters/otlp/logs/src/testGrpcNettyShaded/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcNettyShadedLogExporterTest.java
@@ -9,6 +9,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import io.grpc.inprocess.InProcessChannelBuilder;
import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.logs.Severity;
import io.opentelemetry.exporter.internal.grpc.UpstreamGrpcExporter;
import io.opentelemetry.exporter.internal.marshal.Marshaler;
import io.opentelemetry.exporter.internal.otlp.logs.ResourceLogsMarshaler;
@@ -18,7 +19,6 @@ import io.opentelemetry.exporter.otlp.testing.internal.TelemetryExporterBuilder;
import io.opentelemetry.proto.logs.v1.ResourceLogs;
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
import io.opentelemetry.sdk.logs.data.LogData;
-import io.opentelemetry.sdk.logs.data.Severity;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.testing.logs.TestLogData;
import java.io.Closeable;
diff --git a/exporters/otlp/logs/src/testGrpcOkhttp/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcNettyOkHttpLogExporterTest.java b/exporters/otlp/logs/src/testGrpcOkhttp/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcNettyOkHttpLogExporterTest.java
index a7cfccd95d..b66753ca4b 100644
--- a/exporters/otlp/logs/src/testGrpcOkhttp/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcNettyOkHttpLogExporterTest.java
+++ b/exporters/otlp/logs/src/testGrpcOkhttp/java/io/opentelemetry/exporter/otlp/logs/OtlpGrpcNettyOkHttpLogExporterTest.java
@@ -9,6 +9,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import io.grpc.inprocess.InProcessChannelBuilder;
import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.logs.Severity;
import io.opentelemetry.exporter.internal.grpc.UpstreamGrpcExporter;
import io.opentelemetry.exporter.internal.marshal.Marshaler;
import io.opentelemetry.exporter.internal.otlp.logs.ResourceLogsMarshaler;
@@ -18,7 +19,6 @@ import io.opentelemetry.exporter.otlp.testing.internal.TelemetryExporterBuilder;
import io.opentelemetry.proto.logs.v1.ResourceLogs;
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
import io.opentelemetry.sdk.logs.data.LogData;
-import io.opentelemetry.sdk.logs.data.Severity;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.testing.logs.TestLogData;
import java.io.Closeable;
diff --git a/integration-tests/otlp/src/main/java/io/opentelemetry/integrationtest/OtlpExporterIntegrationTest.java b/integration-tests/otlp/src/main/java/io/opentelemetry/integrationtest/OtlpExporterIntegrationTest.java
index 97ee30c094..3c91072661 100644
--- a/integration-tests/otlp/src/main/java/io/opentelemetry/integrationtest/OtlpExporterIntegrationTest.java
+++ b/integration-tests/otlp/src/main/java/io/opentelemetry/integrationtest/OtlpExporterIntegrationTest.java
@@ -18,6 +18,8 @@ import com.linecorp.armeria.testing.junit5.server.SelfSignedCertificateExtension
import com.linecorp.armeria.testing.junit5.server.ServerExtension;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.logs.Logger;
+import io.opentelemetry.api.logs.Severity;
import io.opentelemetry.api.metrics.LongCounter;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.trace.Span;
@@ -53,9 +55,7 @@ import io.opentelemetry.proto.metrics.v1.Sum;
import io.opentelemetry.proto.trace.v1.ResourceSpans;
import io.opentelemetry.proto.trace.v1.ScopeSpans;
import io.opentelemetry.proto.trace.v1.Span.Link;
-import io.opentelemetry.sdk.logs.Logger;
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
-import io.opentelemetry.sdk.logs.data.Severity;
import io.opentelemetry.sdk.logs.export.LogExporter;
import io.opentelemetry.sdk.logs.export.SimpleLogProcessor;
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java
index c1fca9041d..cb3bce4e69 100644
--- a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java
+++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkBuilder.java
@@ -8,6 +8,7 @@ package io.opentelemetry.sdk.autoconfigure;
import static java.util.Objects.requireNonNull;
import io.opentelemetry.api.GlobalOpenTelemetry;
+import io.opentelemetry.api.logs.GlobalLoggerProvider;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.sdk.OpenTelemetrySdk;
@@ -388,6 +389,7 @@ public final class AutoConfiguredOpenTelemetrySdkBuilder implements AutoConfigur
if (setResultAsGlobal) {
GlobalOpenTelemetry.set(openTelemetrySdk);
+ GlobalLoggerProvider.set(openTelemetrySdk.getSdkLoggerProvider());
logger.log(
Level.FINE, "Global OpenTelemetry set to {0} by autoconfiguration", openTelemetrySdk);
}
diff --git a/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkTest.java b/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkTest.java
index c4b286b165..3b9916c136 100644
--- a/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkTest.java
+++ b/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/AutoConfiguredOpenTelemetrySdkTest.java
@@ -16,6 +16,7 @@ import static org.mockito.Mockito.when;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
+import io.opentelemetry.api.logs.GlobalLoggerProvider;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanId;
import io.opentelemetry.api.trace.TraceId;
@@ -287,9 +288,10 @@ class AutoConfiguredOpenTelemetrySdkTest {
void builder_setResultAsGlobalFalse() {
GlobalOpenTelemetry.set(OpenTelemetry.noop());
- OpenTelemetry openTelemetry = builder.setResultAsGlobal(false).build().getOpenTelemetrySdk();
+ OpenTelemetrySdk openTelemetry = builder.setResultAsGlobal(false).build().getOpenTelemetrySdk();
assertThat(GlobalOpenTelemetry.get()).extracting("delegate").isNotSameAs(openTelemetry);
+ assertThat(GlobalLoggerProvider.get()).isNotSameAs(openTelemetry.getSdkLoggerProvider());
}
@Test
@@ -297,6 +299,7 @@ class AutoConfiguredOpenTelemetrySdkTest {
OpenTelemetrySdk openTelemetry = builder.setResultAsGlobal(true).build().getOpenTelemetrySdk();
assertThat(GlobalOpenTelemetry.get()).extracting("delegate").isSameAs(openTelemetry);
+ assertThat(GlobalLoggerProvider.get()).isSameAs(openTelemetry.getSdkLoggerProvider());
}
private static Supplier