From 446a9613108d5fe88f42ee2d92c9f7edd2531f32 Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Thu, 17 Apr 2025 07:58:56 +0200 Subject: [PATCH] Revert "Relocate OpenTelemetryLoggingAutoConfiguration and SdkLoggerProviderBuilderCustomizer to an OpenTelemetry-specific package" This reverts commit 2ca0897b88c199cae688df3d2b1b6eed6dc2ae65. See gh-44647 --- ...OpenTelemetryLoggingAutoConfiguration.java | 37 ++++++++-- .../SdkLoggerProviderBuilderCustomizer.java | 5 +- ...OpenTelemetryLoggingAutoConfiguration.java | 64 ------------------ .../SdkLoggerProviderBuilderCustomizer.java | 38 ----------- .../logging/opentelemetry/package-info.java | 20 ------ ...ot.autoconfigure.AutoConfiguration.imports | 2 +- ...toconfigure.AutoConfiguration.replacements | 1 - ...elemetryLoggingAutoConfigurationTests.java | 67 +++---------------- ...gingAutoConfigurationIntegrationTests.java | 4 +- 9 files changed, 48 insertions(+), 190 deletions(-) delete mode 100644 spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/OpenTelemetryLoggingAutoConfiguration.java delete mode 100644 spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/SdkLoggerProviderBuilderCustomizer.java delete mode 100644 spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/package-info.java rename spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/{opentelemetry => }/OpenTelemetryLoggingAutoConfigurationTests.java (76%) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/OpenTelemetryLoggingAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/OpenTelemetryLoggingAutoConfiguration.java index 19c4c41650..4d1e33ba8b 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/OpenTelemetryLoggingAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/OpenTelemetryLoggingAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2025 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,17 +16,46 @@ package org.springframework.boot.actuate.autoconfigure.logging; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.sdk.logs.LogRecordProcessor; +import io.opentelemetry.sdk.logs.SdkLoggerProvider; +import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder; +import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor; +import io.opentelemetry.sdk.logs.export.LogRecordExporter; +import io.opentelemetry.sdk.resources.Resource; + +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; /** * {@link EnableAutoConfiguration Auto-configuration} for OpenTelemetry logging. * * @author Toshiaki Maki * @since 3.4.0 - * @deprecated since 3.5.0 for removal in 4.0.0 in favor of - * {@link org.springframework.boot.actuate.autoconfigure.logging.opentelemetry.OpenTelemetryLoggingAutoConfiguration} */ -@Deprecated(since = "3.4.0", forRemoval = true) +@AutoConfiguration +@ConditionalOnClass({ SdkLoggerProvider.class, OpenTelemetry.class }) public class OpenTelemetryLoggingAutoConfiguration { + @Bean + @ConditionalOnMissingBean + BatchLogRecordProcessor batchLogRecordProcessor(ObjectProvider logRecordExporters) { + return BatchLogRecordProcessor.builder(LogRecordExporter.composite(logRecordExporters.orderedStream().toList())) + .build(); + } + + @Bean + @ConditionalOnMissingBean + SdkLoggerProvider otelSdkLoggerProvider(Resource resource, ObjectProvider logRecordProcessors, + ObjectProvider customizers) { + SdkLoggerProviderBuilder builder = SdkLoggerProvider.builder().setResource(resource); + logRecordProcessors.orderedStream().forEach(builder::addLogRecordProcessor); + customizers.orderedStream().forEach((customizer) -> customizer.customize(builder)); + return builder.build(); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/SdkLoggerProviderBuilderCustomizer.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/SdkLoggerProviderBuilderCustomizer.java index d15dc3c171..5961f1ec4d 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/SdkLoggerProviderBuilderCustomizer.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/SdkLoggerProviderBuilderCustomizer.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2025 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,11 +25,8 @@ import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder; * * @author Toshiaki Maki * @since 3.4.0 - * @deprecated since 3.5.0 for removal in 4.0.0 in favor of - * {@link org.springframework.boot.actuate.autoconfigure.logging.opentelemetry.SdkLoggerProviderBuilderCustomizer} */ @FunctionalInterface -@Deprecated(since = "3.5.0", forRemoval = true) public interface SdkLoggerProviderBuilderCustomizer { /** diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/OpenTelemetryLoggingAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/OpenTelemetryLoggingAutoConfiguration.java deleted file mode 100644 index 8b38ba6127..0000000000 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/OpenTelemetryLoggingAutoConfiguration.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2012-2025 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.logging.opentelemetry; - -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.sdk.logs.LogRecordProcessor; -import io.opentelemetry.sdk.logs.SdkLoggerProvider; -import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder; -import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor; -import io.opentelemetry.sdk.logs.export.LogRecordExporter; -import io.opentelemetry.sdk.resources.Resource; - -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.context.annotation.Bean; - -/** - * {@link EnableAutoConfiguration Auto-configuration} for OpenTelemetry logging. - * - * @author Toshiaki Maki - * @since 3.5.0 - */ -@AutoConfiguration -@ConditionalOnClass({ SdkLoggerProvider.class, OpenTelemetry.class }) -public class OpenTelemetryLoggingAutoConfiguration { - - @Bean - @ConditionalOnMissingBean - BatchLogRecordProcessor batchLogRecordProcessor(ObjectProvider logRecordExporters) { - return BatchLogRecordProcessor.builder(LogRecordExporter.composite(logRecordExporters.orderedStream().toList())) - .build(); - } - - @Bean - @ConditionalOnMissingBean - @SuppressWarnings("removal") - SdkLoggerProvider otelSdkLoggerProvider(Resource resource, ObjectProvider logRecordProcessors, - ObjectProvider customizers, - ObjectProvider deprecatedCustomizers) { - SdkLoggerProviderBuilder builder = SdkLoggerProvider.builder().setResource(resource); - logRecordProcessors.orderedStream().forEach(builder::addLogRecordProcessor); - customizers.orderedStream().forEach((customizer) -> customizer.customize(builder)); - deprecatedCustomizers.orderedStream().forEach((customizer) -> customizer.customize(builder)); - return builder.build(); - } - -} diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/SdkLoggerProviderBuilderCustomizer.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/SdkLoggerProviderBuilderCustomizer.java deleted file mode 100644 index eea628e996..0000000000 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/SdkLoggerProviderBuilderCustomizer.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2012-2025 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.actuate.autoconfigure.logging.opentelemetry; - -import io.opentelemetry.sdk.logs.SdkLoggerProvider; -import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder; - -/** - * Callback interface that can be used to customize the {@link SdkLoggerProviderBuilder} - * that is used to create the auto-configured {@link SdkLoggerProvider}. - * - * @author Toshiaki Maki - * @since 3.5.0 - */ -@FunctionalInterface -public interface SdkLoggerProviderBuilderCustomizer { - - /** - * Customize the given {@code builder}. - * @param builder the builder to customize - */ - void customize(SdkLoggerProviderBuilder builder); - -} diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/package-info.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/package-info.java deleted file mode 100644 index 8e8fc2490b..0000000000 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2012-2025 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Auto-configuration for logging over OpenTelemetry. - */ -package org.springframework.boot.actuate.autoconfigure.logging.opentelemetry; diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index a808630e2e..201b9cfdae 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -34,7 +34,7 @@ org.springframework.boot.actuate.autoconfigure.ldap.LdapHealthContributorAutoCon org.springframework.boot.actuate.autoconfigure.liquibase.LiquibaseEndpointAutoConfiguration org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointAutoConfiguration org.springframework.boot.actuate.autoconfigure.logging.LoggersEndpointAutoConfiguration -org.springframework.boot.actuate.autoconfigure.logging.opentelemetry.OpenTelemetryLoggingAutoConfiguration +org.springframework.boot.actuate.autoconfigure.logging.OpenTelemetryLoggingAutoConfiguration org.springframework.boot.actuate.autoconfigure.logging.otlp.OtlpLoggingAutoConfiguration org.springframework.boot.actuate.autoconfigure.mail.MailHealthContributorAutoConfiguration org.springframework.boot.actuate.autoconfigure.management.HeapDumpWebEndpointAutoConfiguration diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.replacements b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.replacements index 281c6cc865..86a848dac2 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.replacements +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.replacements @@ -1,3 +1,2 @@ org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryAutoConfiguration=org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryTracingAutoConfiguration org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpAutoConfiguration=org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpTracingAutoConfiguration -org.springframework.boot.actuate.autoconfigure.logging.OpenTelemetryLoggingAutoConfiguration=org.springframework.boot.actuate.autoconfigure.logging.opentelemetry.OpenTelemetryLoggingAutoConfiguration diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/OpenTelemetryLoggingAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/OpenTelemetryLoggingAutoConfigurationTests.java similarity index 76% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/OpenTelemetryLoggingAutoConfigurationTests.java rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/OpenTelemetryLoggingAutoConfigurationTests.java index 63f2dd26ba..ce9b89aa00 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/opentelemetry/OpenTelemetryLoggingAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/OpenTelemetryLoggingAutoConfigurationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2025 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.logging.opentelemetry; +package org.springframework.boot.actuate.autoconfigure.logging; import java.util.Collection; import java.util.concurrent.atomic.AtomicInteger; @@ -45,7 +45,6 @@ import static org.assertj.core.api.Assertions.assertThat; * Tests for {@link OpenTelemetryLoggingAutoConfiguration}. * * @author Toshiaki Maki - * @author Moritz Halbritter */ class OpenTelemetryLoggingAutoConfigurationTests { @@ -121,33 +120,16 @@ class OpenTelemetryLoggingAutoConfigurationTests { }); } - @Test - @SuppressWarnings("removal") - void shouldApplyDeprecatedCustomizers() { - this.contextRunner.withUserConfiguration(DeprecatedSdkLoggerProviderBuilderCustomizerConfig.class) - .run((context) -> { - assertThat(context).hasSingleBean(SdkLoggerProvider.class); - assertThat(context.getBeansOfType( - org.springframework.boot.actuate.autoconfigure.logging.SdkLoggerProviderBuilderCustomizer.class)) - .hasSize(1); - assertThat(context).hasBean("deprecatedSdkLoggerProviderBuilderCustomizer"); - assertThat(context - .getBean("deprecatedSdkLoggerProviderBuilderCustomizer", - DeprecatedNoopSdkLoggerProviderBuilderCustomizer.class) - .called()).isEqualTo(1); - }); - } - @Configuration(proxyBeanMethods = false) public static class CustomConfig { @Bean - BatchLogRecordProcessor customBatchLogRecordProcessor() { + public BatchLogRecordProcessor customBatchLogRecordProcessor() { return BatchLogRecordProcessor.builder(new NoopLogRecordExporter()).build(); } @Bean - SdkLoggerProvider customSdkLoggerProvider() { + public SdkLoggerProvider customSdkLoggerProvider() { return SdkLoggerProvider.builder().build(); } @@ -157,12 +139,12 @@ class OpenTelemetryLoggingAutoConfigurationTests { public static class MultipleLogRecordExportersConfig { @Bean - LogRecordExporter customLogRecordExporter1() { + public LogRecordExporter customLogRecordExporter1() { return new NoopLogRecordExporter(); } @Bean - LogRecordExporter customLogRecordExporter2() { + public LogRecordExporter customLogRecordExporter2() { return new NoopLogRecordExporter(); } @@ -172,12 +154,12 @@ class OpenTelemetryLoggingAutoConfigurationTests { public static class MultipleLogRecordProcessorsConfig { @Bean - LogRecordProcessor customLogRecordProcessor1() { + public LogRecordProcessor customLogRecordProcessor1() { return new NoopLogRecordProcessor(); } @Bean - LogRecordProcessor customLogRecordProcessor2() { + public LogRecordProcessor customLogRecordProcessor2() { return new NoopLogRecordProcessor(); } @@ -187,27 +169,17 @@ class OpenTelemetryLoggingAutoConfigurationTests { public static class MultipleSdkLoggerProviderBuilderCustomizersConfig { @Bean - SdkLoggerProviderBuilderCustomizer customSdkLoggerProviderBuilderCustomizer1() { + public SdkLoggerProviderBuilderCustomizer customSdkLoggerProviderBuilderCustomizer1() { return new NoopSdkLoggerProviderBuilderCustomizer(); } @Bean - SdkLoggerProviderBuilderCustomizer customSdkLoggerProviderBuilderCustomizer2() { + public SdkLoggerProviderBuilderCustomizer customSdkLoggerProviderBuilderCustomizer2() { return new NoopSdkLoggerProviderBuilderCustomizer(); } } - @Configuration(proxyBeanMethods = false) - public static class DeprecatedSdkLoggerProviderBuilderCustomizerConfig { - - @Bean - DeprecatedNoopSdkLoggerProviderBuilderCustomizer deprecatedSdkLoggerProviderBuilderCustomizer() { - return new DeprecatedNoopSdkLoggerProviderBuilderCustomizer(); - } - - } - static class NoopLogRecordExporter implements LogRecordExporter { @Override @@ -238,24 +210,7 @@ class OpenTelemetryLoggingAutoConfigurationTests { static class NoopSdkLoggerProviderBuilderCustomizer implements SdkLoggerProviderBuilderCustomizer { - private final AtomicInteger called = new AtomicInteger(0); - - @Override - public void customize(SdkLoggerProviderBuilder builder) { - this.called.incrementAndGet(); - } - - int called() { - return this.called.get(); - } - - } - - @SuppressWarnings("removal") - static class DeprecatedNoopSdkLoggerProviderBuilderCustomizer - implements org.springframework.boot.actuate.autoconfigure.logging.SdkLoggerProviderBuilderCustomizer { - - private final AtomicInteger called = new AtomicInteger(0); + final AtomicInteger called = new AtomicInteger(0); @Override public void customize(SdkLoggerProviderBuilder builder) { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/otlp/OtlpLoggingAutoConfigurationIntegrationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/otlp/OtlpLoggingAutoConfigurationIntegrationTests.java index f5bff35fdf..dce475ccb4 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/otlp/OtlpLoggingAutoConfigurationIntegrationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/otlp/OtlpLoggingAutoConfigurationIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2025 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,7 +32,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.springframework.boot.actuate.autoconfigure.logging.opentelemetry.OpenTelemetryLoggingAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.logging.OpenTelemetryLoggingAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.opentelemetry.OpenTelemetryAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner;