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. */ LogRecordBuilder setAttribute(AttributeKey key, T value); - /** Emit the log to downstream {@link LogProcessor}(s). */ + /** Emit the log record. */ void emit(); } diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/Logger.java b/api/logs/src/main/java/io/opentelemetry/api/logs/Logger.java similarity index 52% rename from sdk/logs/src/main/java/io/opentelemetry/sdk/logs/Logger.java rename to api/logs/src/main/java/io/opentelemetry/api/logs/Logger.java index 81844ce1cb..900a2a5172 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/Logger.java +++ b/api/logs/src/main/java/io/opentelemetry/api/logs/Logger.java @@ -3,15 +3,15 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.sdk.logs; +package io.opentelemetry.api.logs; import javax.annotation.concurrent.ThreadSafe; /** * A {@link Logger} is the entry point into a log pipeline. * - *

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: + * + *

    + *
  1. Enable the creation of log appenders, which bridge logs from other log frameworks (e.g. + * SLF4J, Log4j, JUL, Logback, etc) into OpenTelemetry via {@link Logger#logRecordBuilder()}. + * It is NOT a replacement log framework. + *
  2. Enable emitting structured events. + * TODO: add link when event API is added. + *
+ * + * @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> disableExportPropertySupplier() { diff --git a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java index 143579bda4..e114689374 100644 --- a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java +++ b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java @@ -18,6 +18,8 @@ import io.grpc.stub.StreamObserver; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator; import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.logs.Logger; +import io.opentelemetry.api.logs.Severity; import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; import io.opentelemetry.extension.aws.AwsXrayPropagator; @@ -39,8 +41,6 @@ import io.opentelemetry.proto.logs.v1.LogRecord; import io.opentelemetry.proto.metrics.v1.Metric; import io.opentelemetry.proto.metrics.v1.ResourceMetrics; import io.opentelemetry.proto.metrics.v1.ScopeMetrics; -import io.opentelemetry.sdk.logs.Logger; -import io.opentelemetry.sdk.logs.data.Severity; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -155,7 +155,7 @@ class FullConfigTest { System.setProperty("otel.exporter.otlp.endpoint", endpoint); System.setProperty("otel.exporter.otlp.timeout", "10000"); - // Initialize here so we get SdkLoggerProvider and shutdown when done + // Initialize here so we can shutdown when done autoConfiguredOpenTelemetrySdk = AutoConfiguredOpenTelemetrySdk.initialize(); } diff --git a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/LogExporterCustomizer.java b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/LogExporterCustomizer.java index 7b2ac4e2c6..bf5443de77 100644 --- a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/LogExporterCustomizer.java +++ b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/LogExporterCustomizer.java @@ -5,11 +5,11 @@ package io.opentelemetry.sdk.autoconfigure; +import io.opentelemetry.api.logs.Severity; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider; import io.opentelemetry.sdk.common.CompletableResultCode; import io.opentelemetry.sdk.logs.data.LogData; -import io.opentelemetry.sdk.logs.data.Severity; import io.opentelemetry.sdk.logs.export.LogExporter; import java.util.Collection; import java.util.stream.Collectors; diff --git a/sdk/logs-testing/src/main/java/io/opentelemetry/sdk/testing/assertj/LogDataAssert.java b/sdk/logs-testing/src/main/java/io/opentelemetry/sdk/testing/assertj/LogDataAssert.java index e77d23675f..ca0be6d65b 100644 --- a/sdk/logs-testing/src/main/java/io/opentelemetry/sdk/testing/assertj/LogDataAssert.java +++ b/sdk/logs-testing/src/main/java/io/opentelemetry/sdk/testing/assertj/LogDataAssert.java @@ -10,10 +10,10 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.asser import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.api.logs.Severity; import io.opentelemetry.api.trace.SpanContext; 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 java.util.Map; import java.util.function.Consumer; diff --git a/sdk/logs-testing/src/main/java/io/opentelemetry/sdk/testing/logs/TestLogData.java b/sdk/logs-testing/src/main/java/io/opentelemetry/sdk/testing/logs/TestLogData.java index 00b82f0020..878f953c8b 100644 --- a/sdk/logs-testing/src/main/java/io/opentelemetry/sdk/testing/logs/TestLogData.java +++ b/sdk/logs-testing/src/main/java/io/opentelemetry/sdk/testing/logs/TestLogData.java @@ -7,11 +7,11 @@ package io.opentelemetry.sdk.testing.logs; import com.google.auto.value.AutoValue; import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.logs.Severity; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.logs.data.Body; import io.opentelemetry.sdk.logs.data.LogData; -import io.opentelemetry.sdk.logs.data.Severity; import io.opentelemetry.sdk.resources.Resource; import java.time.Instant; import java.util.concurrent.TimeUnit; diff --git a/sdk/logs-testing/src/test/java/io/opentelemetry/sdk/testing/assertj/LogAssertionsTest.java b/sdk/logs-testing/src/test/java/io/opentelemetry/sdk/testing/assertj/LogAssertionsTest.java index 1941285676..a55dabdd3d 100644 --- a/sdk/logs-testing/src/test/java/io/opentelemetry/sdk/testing/assertj/LogAssertionsTest.java +++ b/sdk/logs-testing/src/test/java/io/opentelemetry/sdk/testing/assertj/LogAssertionsTest.java @@ -12,12 +12,12 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import io.opentelemetry.api.common.AttributeKey; 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.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.util.Arrays; diff --git a/sdk/logs/build.gradle.kts b/sdk/logs/build.gradle.kts index 57dc20c30d..ce4c851a3d 100644 --- a/sdk/logs/build.gradle.kts +++ b/sdk/logs/build.gradle.kts @@ -9,6 +9,7 @@ description = "OpenTelemetry Log SDK" otelJava.moduleName.set("io.opentelemetry.sdk.logs") dependencies { + api(project(":api:logs")) api(project(":sdk:common")) testImplementation(project(":sdk:logs-testing")) diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogProcessor.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogProcessor.java index 913e7a010a..599e3f6e41 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogProcessor.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/LogProcessor.java @@ -5,6 +5,8 @@ package io.opentelemetry.sdk.logs; +import io.opentelemetry.api.logs.LogRecordBuilder; +import io.opentelemetry.api.logs.Logger; import io.opentelemetry.sdk.common.CompletableResultCode; import java.io.Closeable; import java.util.ArrayList; diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogData.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogData.java index f488a33b75..36d6fa8de0 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogData.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogData.java @@ -7,11 +7,11 @@ package io.opentelemetry.sdk.logs; import com.google.auto.value.AutoValue; import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.logs.Severity; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.logs.data.Body; import io.opentelemetry.sdk.logs.data.LogData; -import io.opentelemetry.sdk.logs.data.Severity; import io.opentelemetry.sdk.resources.Resource; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilder.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilder.java index f77d72a230..deed31a923 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilder.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilder.java @@ -6,13 +6,14 @@ package io.opentelemetry.sdk.logs; import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.logs.LogRecordBuilder; +import io.opentelemetry.api.logs.Severity; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.context.Context; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.internal.AttributesMap; import io.opentelemetry.sdk.logs.data.Body; -import io.opentelemetry.sdk.logs.data.Severity; import java.time.Instant; import java.util.concurrent.TimeUnit; import javax.annotation.Nullable; diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogger.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogger.java index 24d54fd3b3..efcb7882ad 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogger.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogger.java @@ -5,6 +5,8 @@ package io.opentelemetry.sdk.logs; +import io.opentelemetry.api.logs.LogRecordBuilder; +import io.opentelemetry.api.logs.Logger; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; /** SDK implementation of {@link Logger}. */ diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLoggerBuilder.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLoggerBuilder.java index b7c870dd4b..99427a2cc2 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLoggerBuilder.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLoggerBuilder.java @@ -5,6 +5,7 @@ package io.opentelemetry.sdk.logs; +import io.opentelemetry.api.logs.LoggerBuilder; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.common.InstrumentationScopeInfoBuilder; import io.opentelemetry.sdk.internal.ComponentRegistry; diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLoggerProvider.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLoggerProvider.java index 9f27db8de4..bde64aa7c7 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLoggerProvider.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLoggerProvider.java @@ -5,6 +5,9 @@ package io.opentelemetry.sdk.logs; +import io.opentelemetry.api.logs.Logger; +import io.opentelemetry.api.logs.LoggerBuilder; +import io.opentelemetry.api.logs.LoggerProvider; import io.opentelemetry.sdk.common.Clock; import io.opentelemetry.sdk.common.CompletableResultCode; import io.opentelemetry.sdk.internal.ComponentRegistry; @@ -15,8 +18,8 @@ import java.util.concurrent.TimeUnit; import java.util.function.Supplier; import java.util.logging.Level; -/** SDK registry for creating {@link Logger}s. */ -public final class SdkLoggerProvider implements Closeable { +/** SDK implementation for {@link LoggerProvider}. */ +public final class SdkLoggerProvider implements LoggerProvider, Closeable { static final String DEFAULT_LOGGER_NAME = "unknown"; private static final java.util.logging.Logger LOGGER = @@ -55,6 +58,7 @@ public final class SdkLoggerProvider implements Closeable { * the instrumentation library, package, or fully qualified class name. Must not be null. * @return a logger instance */ + @Override public Logger get(String instrumentationScopeName) { return loggerBuilder(instrumentationScopeName).build(); } @@ -65,9 +69,10 @@ public final class SdkLoggerProvider implements Closeable { * @param instrumentationScopeName the name of the instrumentation scope * @return a logger builder instance */ + @Override public LoggerBuilder loggerBuilder(String instrumentationScopeName) { if (isNoopLogProcessor) { - return NoopLoggerBuilder.getInstance(); + return LoggerProvider.noop().loggerBuilder(instrumentationScopeName); } if (instrumentationScopeName == null || instrumentationScopeName.isEmpty()) { LOGGER.fine("Logger requested without instrumentation scope name."); diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLoggerProviderBuilder.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLoggerProviderBuilder.java index 039aedafd1..2c930e5826 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLoggerProviderBuilder.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLoggerProviderBuilder.java @@ -7,6 +7,8 @@ package io.opentelemetry.sdk.logs; import static java.util.Objects.requireNonNull; +import io.opentelemetry.api.logs.LogRecordBuilder; +import io.opentelemetry.api.logs.Logger; import io.opentelemetry.sdk.common.Clock; import io.opentelemetry.sdk.logs.data.LogData; import io.opentelemetry.sdk.resources.Resource; diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkReadWriteLogRecord.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkReadWriteLogRecord.java index de9560bff4..c6906d5cb2 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkReadWriteLogRecord.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkReadWriteLogRecord.java @@ -8,12 +8,12 @@ package io.opentelemetry.sdk.logs; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.internal.GuardedBy; +import io.opentelemetry.api.logs.Severity; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.internal.AttributesMap; import io.opentelemetry.sdk.logs.data.Body; import io.opentelemetry.sdk.logs.data.LogData; -import io.opentelemetry.sdk.logs.data.Severity; import io.opentelemetry.sdk.resources.Resource; import javax.annotation.Nullable; import javax.annotation.concurrent.ThreadSafe; diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogData.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogData.java index 216ff3edd0..26890c8f64 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogData.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/data/LogData.java @@ -6,6 +6,7 @@ package io.opentelemetry.sdk.logs.data; import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.logs.Severity; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.logs.LogLimits; diff --git a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/NoopLoggerBuilderTest.java b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/NoopLoggerBuilderTest.java deleted file mode 100644 index 71ac001638..0000000000 --- a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/NoopLoggerBuilderTest.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.sdk.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; -import org.junit.jupiter.api.Test; - -class NoopLoggerBuilderTest { - - @Test - void buildAndEmit() { - NoopLoggerBuilder.getInstance() - .setSchemaUrl("http://endpoint") - .setInstrumentationVersion("1.0.0") - .build() - .logRecordBuilder() - .setAttribute(AttributeKey.stringKey("key"), "value") - .setEpoch(Instant.now()) - .setEpoch(100, TimeUnit.SECONDS) - .setSeverity(Severity.DEBUG) - .setSeverityText("debug") - .setContext(Context.root()) - .setBody("body") - .emit(); - ; - } -} diff --git a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilderTest.java b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilderTest.java index bf05c13355..5fc609f5c4 100644 --- a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilderTest.java +++ b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLogRecordBuilderTest.java @@ -11,6 +11,7 @@ import static org.mockito.Mockito.when; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.logs.Severity; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.api.trace.TraceFlags; @@ -19,7 +20,6 @@ import io.opentelemetry.context.Context; import io.opentelemetry.sdk.common.Clock; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.logs.data.Body; -import io.opentelemetry.sdk.logs.data.Severity; import io.opentelemetry.sdk.resources.Resource; import java.time.Instant; import java.util.concurrent.TimeUnit; diff --git a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLoggerProviderTest.java b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLoggerProviderTest.java index fb9e958dee..17edd615bd 100644 --- a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLoggerProviderTest.java +++ b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLoggerProviderTest.java @@ -14,6 +14,8 @@ import static org.mockito.Mockito.when; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.logs.LoggerProvider; +import io.opentelemetry.api.logs.Severity; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.api.trace.TraceFlags; @@ -24,7 +26,6 @@ import io.opentelemetry.sdk.common.Clock; 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 java.util.ArrayList; import java.util.List; @@ -208,7 +209,7 @@ class SdkLoggerProviderTest { @Test void loggerBuilder_NoProcessor_UsesNoop() { assertThat(SdkLoggerProvider.builder().build().loggerBuilder("test")) - .isInstanceOf(NoopLoggerBuilder.class); + .isSameAs(LoggerProvider.noop().loggerBuilder("test")); } @Test diff --git a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLoggerTest.java b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLoggerTest.java index 7c65538b6d..4e71e25975 100644 --- a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLoggerTest.java +++ b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/SdkLoggerTest.java @@ -21,6 +21,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.api.internal.StringUtils; +import io.opentelemetry.api.logs.LogRecordBuilder; import io.opentelemetry.sdk.common.Clock; import io.opentelemetry.sdk.common.CompletableResultCode; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; diff --git a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/export/InMemoryLogExporterTest.java b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/export/InMemoryLogExporterTest.java index 3ad194a837..c91a680c4f 100644 --- a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/export/InMemoryLogExporterTest.java +++ b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/export/InMemoryLogExporterTest.java @@ -5,10 +5,10 @@ package io.opentelemetry.sdk.logs.export; -import static io.opentelemetry.sdk.logs.data.Severity.DEBUG; +import static io.opentelemetry.api.logs.Severity.DEBUG; import static org.assertj.core.api.Assertions.assertThat; -import io.opentelemetry.sdk.logs.Logger; +import io.opentelemetry.api.logs.Logger; import io.opentelemetry.sdk.logs.SdkLoggerProvider; import io.opentelemetry.sdk.logs.data.LogData; import io.opentelemetry.sdk.testing.assertj.LogAssertions; diff --git a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/export/MultiLogExporterTest.java b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/export/MultiLogExporterTest.java index f6afd230f4..29981cb31d 100644 --- a/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/export/MultiLogExporterTest.java +++ b/sdk/logs/src/test/java/io/opentelemetry/sdk/logs/export/MultiLogExporterTest.java @@ -10,10 +10,10 @@ import static org.mockito.ArgumentMatchers.same; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import io.opentelemetry.api.logs.Severity; import io.opentelemetry.internal.testing.slf4j.SuppressLogger; import io.opentelemetry.sdk.common.CompletableResultCode; import io.opentelemetry.sdk.logs.data.LogData; -import io.opentelemetry.sdk.logs.data.Severity; import io.opentelemetry.sdk.testing.logs.TestLogData; import java.util.Arrays; import java.util.Collections; diff --git a/settings.gradle.kts b/settings.gradle.kts index 8c557704c2..ce7c2fbe29 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -22,6 +22,7 @@ dependencyResolutionManagement { rootProject.name = "opentelemetry-java" include(":all") include(":api:all") +include(":api:logs") include(":semconv") include(":bom") include(":bom-alpha")