diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderInstaller.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderInstaller.java index 811dacb31bf7..a1e66e33fa17 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderInstaller.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderInstaller.java @@ -30,15 +30,14 @@ static void install(ApplicationEnvironmentPreparedEvent applicationEnvironmentPr private static boolean isLogbackAppenderAddable( ApplicationEnvironmentPreparedEvent applicationEnvironmentPreparedEvent) { - Boolean otelSdkDisableProperty = - evaluateBooleanProperty(applicationEnvironmentPreparedEvent, "otel.sdk.disabled"); - Boolean logbackInstrumentationEnabledProperty = + boolean otelSdkDisableProperty = + evaluateBooleanProperty(applicationEnvironmentPreparedEvent, "otel.sdk.disabled", false); + boolean logbackInstrumentationEnabledProperty = evaluateBooleanProperty( - applicationEnvironmentPreparedEvent, "otel.instrumentation.logback-appender.enabled"); - return otelSdkDisableProperty == null - || !otelSdkDisableProperty.booleanValue() - || logbackInstrumentationEnabledProperty == null - || logbackInstrumentationEnabledProperty.booleanValue(); + applicationEnvironmentPreparedEvent, + "otel.instrumentation.logback-appender.enabled", + true); + return !otelSdkDisableProperty && logbackInstrumentationEnabledProperty; } private static void reInitializeOpenTelemetryAppender( @@ -133,6 +132,15 @@ private static Boolean evaluateBooleanProperty( .getProperty(property, Boolean.class); } + private static boolean evaluateBooleanProperty( + ApplicationEnvironmentPreparedEvent applicationEnvironmentPreparedEvent, + String property, + boolean defaultValue) { + return applicationEnvironmentPreparedEvent + .getEnvironment() + .getProperty(property, Boolean.class, defaultValue); + } + private static Optional findOpenTelemetryAppender() { ILoggerFactory loggerFactorySpi = LoggerFactory.getILoggerFactory(); if (!(loggerFactorySpi instanceof LoggerContext)) { diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderTest.java index 9d1336b67ff6..c64cc6277a2e 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderTest.java @@ -110,4 +110,40 @@ void shouldNotInitializeAppenderWhenDisabled() { assertThat(testing.logRecords()).isEmpty(); } + + @Test + void shouldNotInitializeAppenderWhenSdkDisabled() { + Map properties = new HashMap<>(); + properties.put("logging.config", "classpath:logback-test.xml"); + properties.put("otel.sdk.disabled", "true"); + + SpringApplication app = + new SpringApplication( + TestingOpenTelemetryConfiguration.class, OpenTelemetryAppenderAutoConfiguration.class); + app.setDefaultProperties(properties); + ConfigurableApplicationContext context = app.run(); + cleanup.deferCleanup(context); + + LoggerFactory.getLogger("test").info("test log message"); + + assertThat(testing.logRecords()).isEmpty(); + } + + @Test + void shouldNotInitializeAppenderWhenInstrumentationDisabled() { + Map properties = new HashMap<>(); + properties.put("logging.config", "classpath:logback-test.xml"); + properties.put("otel.instrumentation.logback-appender.enabled", "false"); + + SpringApplication app = + new SpringApplication( + TestingOpenTelemetryConfiguration.class, OpenTelemetryAppenderAutoConfiguration.class); + app.setDefaultProperties(properties); + ConfigurableApplicationContext context = app.run(); + cleanup.deferCleanup(context); + + LoggerFactory.getLogger("test").info("test log message"); + + assertThat(testing.logRecords()).isEmpty(); + } }