Merge 8ccecdbc64 into 9f021ffdc5
This commit is contained in:
commit
1e5da09de1
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.logging;
|
||||||
|
|
||||||
|
import static java.util.Collections.emptyList;
|
||||||
|
|
||||||
|
import io.opentelemetry.exporter.logging.LoggingSpanExporter;
|
||||||
|
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
|
||||||
|
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
|
||||||
|
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
|
||||||
|
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
|
||||||
|
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
|
||||||
|
* any time.
|
||||||
|
*/
|
||||||
|
@Conditional(SdkEnabled.class)
|
||||||
|
// for forwards compatibility with declarative configuration
|
||||||
|
@ConditionalOnProperty(name = "otel.debug", havingValue = "true")
|
||||||
|
@ConditionalOnClass(LoggingSpanExporter.class)
|
||||||
|
@Configuration
|
||||||
|
public class LoggingExporterAutoConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public AutoConfigurationCustomizerProvider loggingOtelCustomizer() {
|
||||||
|
return p ->
|
||||||
|
p.addTracerProviderCustomizer(
|
||||||
|
(builder, config) -> {
|
||||||
|
enableLoggingExporter(builder, config);
|
||||||
|
return builder;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void enableLoggingExporter(
|
||||||
|
SdkTracerProviderBuilder builder, ConfigProperties config) {
|
||||||
|
// don't install another instance if the user has already explicitly requested it.
|
||||||
|
if (loggingExporterIsNotAlreadyConfigured(config)) {
|
||||||
|
builder.addSpanProcessor(SimpleSpanProcessor.create(LoggingSpanExporter.create()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean loggingExporterIsNotAlreadyConfigured(ConfigProperties config) {
|
||||||
|
return !config.getList("otel.traces.exporter", emptyList()).contains("logging");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.logging;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
|
import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
|
||||||
|
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
|
||||||
|
import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension;
|
||||||
|
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
|
||||||
|
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
|
||||||
|
import java.util.Collections;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||||
|
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||||
|
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||||
|
|
||||||
|
class LoggingExporterAutoConfigurationTest {
|
||||||
|
@RegisterExtension
|
||||||
|
static final InstrumentationExtension testing = LibraryInstrumentationExtension.create();
|
||||||
|
|
||||||
|
private final ApplicationContextRunner runner =
|
||||||
|
new ApplicationContextRunner()
|
||||||
|
.withBean(
|
||||||
|
ConfigProperties.class,
|
||||||
|
() -> DefaultConfigProperties.createFromMap(Collections.emptyMap()))
|
||||||
|
.withConfiguration(
|
||||||
|
AutoConfigurations.of(
|
||||||
|
LoggingExporterAutoConfiguration.class, OpenTelemetryAutoConfiguration.class));
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void instrumentationEnabled() {
|
||||||
|
runner
|
||||||
|
.withPropertyValues("otel.debug=true")
|
||||||
|
.run(
|
||||||
|
context ->
|
||||||
|
assertThat(context.getBean(OpenTelemetry.class).toString())
|
||||||
|
.containsOnlyOnce("cntscnt"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void instrumentationDisabled() {
|
||||||
|
runner
|
||||||
|
.withPropertyValues("otel.debug=false")
|
||||||
|
.run(
|
||||||
|
context ->
|
||||||
|
assertThat(context.getBean(OpenTelemetry.class).toString())
|
||||||
|
.doesNotContain("cntscnt"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -26,6 +26,12 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class TestExporterCustomizerProvider implements DeclarativeConfigurationCustomizerProvider {
|
public class TestExporterCustomizerProvider implements DeclarativeConfigurationCustomizerProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int order() {
|
||||||
|
return Integer.MIN_VALUE; // run before other customizers that might add exporters
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void customize(DeclarativeConfigurationCustomizer customizer) {
|
public void customize(DeclarativeConfigurationCustomizer customizer) {
|
||||||
if (TestSpanExporterComponentProvider.getSpanExporter() == null) {
|
if (TestSpanExporterComponentProvider.getSpanExporter() == null) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue