diff --git a/sdk/all/build.gradle.kts b/sdk/all/build.gradle.kts index 08a1ee6965..1b3bcca09a 100644 --- a/sdk/all/build.gradle.kts +++ b/sdk/all/build.gradle.kts @@ -18,6 +18,9 @@ dependencies { // implementation dependency to require users to add the artifact directly to their build to use // SdkMeterProviderBuilder. implementation(project(":sdk:metrics")) + // implementation dependency to require users to add the artifact directly to their build to use + // SdkLogEmitterProvider. + implementation(project(":sdk:logs")) annotationProcessor("com.google.auto.value:auto-value") diff --git a/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdk.java b/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdk.java index 3715769c9b..a75951f9b5 100644 --- a/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdk.java +++ b/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdk.java @@ -12,6 +12,7 @@ import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.api.trace.TracerBuilder; import io.opentelemetry.api.trace.TracerProvider; import io.opentelemetry.context.propagation.ContextPropagators; +import io.opentelemetry.sdk.logs.SdkLogEmitterProvider; import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.trace.SdkTracerProvider; import javax.annotation.concurrent.ThreadSafe; @@ -21,14 +22,17 @@ import javax.annotation.concurrent.ThreadSafe; public final class OpenTelemetrySdk implements OpenTelemetry { private final ObfuscatedTracerProvider tracerProvider; private final ObfuscatedMeterProvider meterProvider; + private final SdkLogEmitterProvider logEmitterProvider; private final ContextPropagators propagators; OpenTelemetrySdk( SdkTracerProvider tracerProvider, SdkMeterProvider meterProvider, + SdkLogEmitterProvider logEmitterProvider, ContextPropagators propagators) { this.tracerProvider = new ObfuscatedTracerProvider(tracerProvider); this.meterProvider = new ObfuscatedMeterProvider(meterProvider); + this.logEmitterProvider = logEmitterProvider; this.propagators = propagators; } @@ -60,6 +64,11 @@ public final class OpenTelemetrySdk implements OpenTelemetry { return meterProvider.unobfuscate(); } + /** Returns the {@link SdkLogEmitterProvider} for this {@link OpenTelemetrySdk}. */ + public SdkLogEmitterProvider getSdkLogEmitterProvider() { + return logEmitterProvider; + } + @Override public ContextPropagators getPropagators() { return propagators; diff --git a/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdkBuilder.java b/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdkBuilder.java index d3d5a739ed..d03cfd495f 100644 --- a/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdkBuilder.java +++ b/sdk/all/src/main/java/io/opentelemetry/sdk/OpenTelemetrySdkBuilder.java @@ -7,6 +7,7 @@ package io.opentelemetry.sdk; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.propagation.ContextPropagators; +import io.opentelemetry.sdk.logs.SdkLogEmitterProvider; import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder; @@ -18,6 +19,7 @@ public final class OpenTelemetrySdkBuilder { private ContextPropagators propagators = ContextPropagators.noop(); @Nullable private SdkTracerProvider tracerProvider; @Nullable private SdkMeterProvider meterProvider; + @Nullable private SdkLogEmitterProvider logEmitterProvider; /** * Package protected to disallow direct initialization. @@ -49,6 +51,18 @@ public final class OpenTelemetrySdkBuilder { return this; } + /** + * Sets the {@link SdkLogEmitterProvider} to use. This can be used to configure log settings by + * returning the instance created by a {@link + * io.opentelemetry.sdk.logs.SdkLogEmitterProviderBuilder}. + * + * @see SdkLogEmitterProvider#builder() + */ + public OpenTelemetrySdkBuilder setLogEmitterProvider(SdkLogEmitterProvider logEmitterProvider) { + this.logEmitterProvider = logEmitterProvider; + return this; + } + /** Sets the {@link ContextPropagators} to use. */ public OpenTelemetrySdkBuilder setPropagators(ContextPropagators propagators) { this.propagators = propagators; @@ -91,6 +105,11 @@ public final class OpenTelemetrySdkBuilder { meterProvider = SdkMeterProvider.builder().build(); } - return new OpenTelemetrySdk(tracerProvider, meterProvider, propagators); + SdkLogEmitterProvider logEmitterProvider = this.logEmitterProvider; + if (logEmitterProvider == null) { + logEmitterProvider = SdkLogEmitterProvider.builder().build(); + } + + return new OpenTelemetrySdk(tracerProvider, meterProvider, logEmitterProvider, propagators); } } diff --git a/sdk/all/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java b/sdk/all/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java index 612846e20a..8e7c608321 100644 --- a/sdk/all/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java +++ b/sdk/all/src/test/java/io/opentelemetry/sdk/OpenTelemetrySdkTest.java @@ -17,6 +17,7 @@ import io.opentelemetry.api.trace.TracerProvider; import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.context.propagation.TextMapPropagator; import io.opentelemetry.sdk.common.Clock; +import io.opentelemetry.sdk.logs.SdkLogEmitterProvider; import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.trace.IdGenerator; @@ -36,6 +37,7 @@ class OpenTelemetrySdkTest { @Mock private SdkTracerProvider tracerProvider; @Mock private SdkMeterProvider meterProvider; + @Mock private SdkLogEmitterProvider logEmitterProvider; @Mock private ContextPropagators propagators; @Mock private Clock clock; @@ -115,6 +117,7 @@ class OpenTelemetrySdkTest { OpenTelemetrySdk.builder() .setTracerProvider(tracerProvider) .setMeterProvider(meterProvider) + .setLogEmitterProvider(logEmitterProvider) .setPropagators(propagators) .build(); assertThat( @@ -126,7 +129,7 @@ class OpenTelemetrySdkTest { ((OpenTelemetrySdk.ObfuscatedMeterProvider) openTelemetry.getMeterProvider()) .unobfuscate()) .isEqualTo(meterProvider); - assertThat(openTelemetry.getSdkMeterProvider()).isEqualTo(meterProvider); + assertThat(openTelemetry.getSdkLogEmitterProvider()).isEqualTo(logEmitterProvider); assertThat(openTelemetry.getPropagators()).isEqualTo(propagators); }