Browse Source

Log4j and Logback appenders opt-in to using GlobalOpenTelemetry (#8791)

jack-berg 1 year ago
parent
commit
d20da99e94

+ 20 - 0
instrumentation/log4j/log4j-appender-2.17/library/README.md

@@ -56,3 +56,23 @@ The following demonstrates how you might configure the appender in your `log4j.x
 
 In this example Log4j2 log events will be sent to both the console appender and
 the `OpenTelemetryAppender`.
+
+In order to function, `OpenTelemetryAppender` needs access to an `OpenTelemetry` instance. This must
+be set programmatically during application startup as follows:
+
+```java
+import io.opentelemetry.instrumentation.log4j.appender.v2_17.OpenTelemetryAppender;
+import io.opentelemetry.sdk.OpenTelemetrySdk;
+
+public class Application {
+
+  public static void main(String[] args) {
+    OpenTelemetrySdk openTelemetrySdk = // Configure OpenTelemetrySdk
+
+    // Find OpenTelemetryAppender in log4j configuration and install openTelemetrySdk
+    OpenTelemetryAppender.install(openTelemetrySdk);
+
+    // ... proceed with application
+  }
+}
+```

+ 36 - 7
instrumentation/log4j/log4j-appender-2.17/library/src/main/java/io/opentelemetry/instrumentation/log4j/appender/v2_17/OpenTelemetryAppender.java

@@ -8,7 +8,6 @@ package io.opentelemetry.instrumentation.log4j.appender.v2_17;
 import static java.util.Collections.emptyList;
 
 import com.google.errorprone.annotations.CanIgnoreReturnValue;
-import io.opentelemetry.api.GlobalOpenTelemetry;
 import io.opentelemetry.api.OpenTelemetry;
 import io.opentelemetry.api.logs.LogRecordBuilder;
 import io.opentelemetry.instrumentation.log4j.appender.v2_17.internal.ContextDataAccessor;
@@ -20,13 +19,16 @@ import java.util.concurrent.TimeUnit;
 import java.util.function.BiConsumer;
 import java.util.stream.Collectors;
 import javax.annotation.Nullable;
+import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.Core;
 import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.AbstractAppender;
+import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.Property;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
 import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
@@ -44,7 +46,29 @@ public class OpenTelemetryAppender extends AbstractAppender {
   static final String PLUGIN_NAME = "OpenTelemetry";
 
   private final LogEventMapper<ReadOnlyStringMap> mapper;
-  @Nullable private OpenTelemetry openTelemetry;
+  private OpenTelemetry openTelemetry;
+
+  /**
+   * Installs the {@code openTelemetry} instance on any {@link OpenTelemetryAppender}s identified in
+   * the {@link LoggerContext}.
+   */
+  public static void install(OpenTelemetry openTelemetry) {
+    org.apache.logging.log4j.spi.LoggerContext loggerContextSpi = LogManager.getContext(false);
+    if (!(loggerContextSpi instanceof LoggerContext)) {
+      return;
+    }
+    LoggerContext loggerContext = (LoggerContext) loggerContextSpi;
+    Configuration config = loggerContext.getConfiguration();
+    config
+        .getAppenders()
+        .values()
+        .forEach(
+            appender -> {
+              if (appender instanceof OpenTelemetryAppender) {
+                ((OpenTelemetryAppender) appender).setOpenTelemetry(openTelemetry);
+              }
+            });
+  }
 
   @PluginBuilderFactory
   public static <B extends Builder<B>> B builder() {
@@ -97,6 +121,7 @@ public class OpenTelemetryAppender extends AbstractAppender {
       return asBuilder();
     }
 
+    /** Configures the {@link OpenTelemetry} used to append logs. */
     @CanIgnoreReturnValue
     public B setOpenTelemetry(OpenTelemetry openTelemetry) {
       this.openTelemetry = openTelemetry;
@@ -105,6 +130,10 @@ public class OpenTelemetryAppender extends AbstractAppender {
 
     @Override
     public OpenTelemetryAppender build() {
+      OpenTelemetry openTelemetry = this.openTelemetry;
+      if (openTelemetry == null) {
+        openTelemetry = OpenTelemetry.noop();
+      }
       return new OpenTelemetryAppender(
           getName(),
           getLayout(),
@@ -152,14 +181,14 @@ public class OpenTelemetryAppender extends AbstractAppender {
         .collect(Collectors.toList());
   }
 
+  /**
+   * Configures the {@link OpenTelemetry} used to append logs. This MUST be called for the appender
+   * to function. See {@link #install(OpenTelemetry)} for simple installation option.
+   */
   public void setOpenTelemetry(OpenTelemetry openTelemetry) {
     this.openTelemetry = openTelemetry;
   }
 
-  private OpenTelemetry getOpenTelemetry() {
-    return openTelemetry == null ? GlobalOpenTelemetry.get() : openTelemetry;
-  }
-
   @Override
   public void append(LogEvent event) {
     String instrumentationName = event.getLoggerName();
@@ -168,7 +197,7 @@ public class OpenTelemetryAppender extends AbstractAppender {
     }
 
     LogRecordBuilder builder =
-        getOpenTelemetry()
+        this.openTelemetry
             .getLogsBridge()
             .loggerBuilder(instrumentationName)
             .build()

+ 0 - 57
instrumentation/log4j/log4j-appender-2.17/library/src/test/java/io/opentelemetry/instrumentation/log4j/appender/v2_17/OpenTelemetryAppenderConfigTest.java

@@ -1,57 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.log4j.appender.v2_17;
-
-import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
-
-import io.opentelemetry.api.GlobalOpenTelemetry;
-import io.opentelemetry.sdk.OpenTelemetrySdk;
-import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
-import io.opentelemetry.sdk.logs.SdkLoggerProvider;
-import io.opentelemetry.sdk.logs.data.LogRecordData;
-import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
-import io.opentelemetry.sdk.resources.Resource;
-import io.opentelemetry.sdk.testing.exporter.InMemoryLogRecordExporter;
-import java.util.List;
-import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.apache.logging.log4j.message.FormattedMessage;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-
-class OpenTelemetryAppenderConfigTest extends OpenTelemetryAppenderConfigTestBase {
-
-  @BeforeAll
-  static void setupAll() {
-    logRecordExporter = InMemoryLogRecordExporter.create();
-    resource = Resource.getDefault();
-    instrumentationScopeInfo = InstrumentationScopeInfo.create("TestLogger");
-
-    SdkLoggerProvider loggerProvider =
-        SdkLoggerProvider.builder()
-            .setResource(resource)
-            .addLogRecordProcessor(SimpleLogRecordProcessor.create(logRecordExporter))
-            .build();
-
-    GlobalOpenTelemetry.resetForTest();
-    GlobalOpenTelemetry.set(OpenTelemetrySdk.builder().setLoggerProvider(loggerProvider).build());
-  }
-
-  @Test
-  void initializeWithBuilder() {
-    OpenTelemetryAppender appender =
-        OpenTelemetryAppender.builder().setName("OpenTelemetryAppender").build();
-    appender.start();
-
-    appender.append(
-        Log4jLogEvent.newBuilder()
-            .setMessage(new FormattedMessage("log message 1", (Object) null))
-            .build());
-
-    List<LogRecordData> logDataList = logRecordExporter.getFinishedLogRecordItems();
-    assertThat(logDataList)
-        .satisfiesExactly(logRecordData -> assertThat(logDataList.get(0)).hasBody("log message 1"));
-  }
-}

+ 0 - 78
instrumentation/log4j/log4j-appender-2.17/library/src/test/java/io/opentelemetry/instrumentation/log4j/appender/v2_17/OpenTelemetryAppenderConfigWithOpenTelemetryTest.java

@@ -1,78 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.log4j.appender.v2_17;
-
-import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
-
-import io.opentelemetry.api.GlobalOpenTelemetry;
-import io.opentelemetry.api.OpenTelemetry;
-import io.opentelemetry.sdk.OpenTelemetrySdk;
-import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
-import io.opentelemetry.sdk.logs.SdkLoggerProvider;
-import io.opentelemetry.sdk.logs.data.LogRecordData;
-import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
-import io.opentelemetry.sdk.resources.Resource;
-import io.opentelemetry.sdk.testing.exporter.InMemoryLogRecordExporter;
-import java.util.List;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.apache.logging.log4j.message.FormattedMessage;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-
-class OpenTelemetryAppenderConfigWithOpenTelemetryTest extends OpenTelemetryAppenderConfigTestBase {
-  @BeforeAll
-  static void setupAll() {
-    logRecordExporter = InMemoryLogRecordExporter.create();
-    resource = Resource.getDefault();
-    instrumentationScopeInfo = InstrumentationScopeInfo.create("TestLogger");
-
-    SdkLoggerProvider loggerProvider =
-        SdkLoggerProvider.builder()
-            .setResource(resource)
-            .addLogRecordProcessor(SimpleLogRecordProcessor.create(logRecordExporter))
-            .build();
-
-    GlobalOpenTelemetry.resetForTest();
-    openTelemetry = OpenTelemetrySdk.builder().setLoggerProvider(loggerProvider).build();
-    setOpenTelemetry(openTelemetry);
-  }
-
-  private static void setOpenTelemetry(OpenTelemetry openTelemetry) {
-    Configuration config = ((LoggerContext) LogManager.getContext(false)).getConfiguration();
-    config.getAppenders().values().stream()
-        .filter(a -> a instanceof OpenTelemetryAppender)
-        .forEach(a -> ((OpenTelemetryAppender) a).setOpenTelemetry(openTelemetry));
-  }
-
-  @AfterAll
-  static void cleanupAll() {
-    // This is to make sure that other test classes don't have issues with the logger provider set
-    setOpenTelemetry(null);
-  }
-
-  @Test
-  void initializeWithBuilder() {
-    OpenTelemetryAppender appender =
-        OpenTelemetryAppender.builder()
-            .setName("OpenTelemetryAppender")
-            .setOpenTelemetry(openTelemetry)
-            .build();
-    appender.start();
-
-    appender.append(
-        Log4jLogEvent.newBuilder()
-            .setMessage(new FormattedMessage("log message 1", (Object) null))
-            .build());
-
-    List<LogRecordData> logDataList = logRecordExporter.getFinishedLogRecordItems();
-    assertThat(logDataList)
-        .satisfiesExactly(logRecordData -> assertThat(logDataList.get(0)).hasBody("log message 1"));
-  }
-}

+ 54 - 6
instrumentation/log4j/log4j-appender-2.17/library/src/test/java/io/opentelemetry/instrumentation/log4j/appender/v2_17/OpenTelemetryAppenderConfigTestBase.java → instrumentation/log4j/log4j-appender-2.17/library/src/test/java/io/opentelemetry/instrumentation/log4j/appender/v2_17/OpenTelemetryAppenderTest.java

@@ -17,8 +17,11 @@ import io.opentelemetry.api.logs.Severity;
 import io.opentelemetry.api.trace.Span;
 import io.opentelemetry.api.trace.SpanContext;
 import io.opentelemetry.context.Scope;
+import io.opentelemetry.sdk.OpenTelemetrySdk;
 import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
+import io.opentelemetry.sdk.logs.SdkLoggerProvider;
 import io.opentelemetry.sdk.logs.data.LogRecordData;
+import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
 import io.opentelemetry.sdk.resources.Resource;
 import io.opentelemetry.sdk.testing.exporter.InMemoryLogRecordExporter;
 import io.opentelemetry.sdk.trace.SdkTracerProvider;
@@ -30,19 +33,39 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.MarkerManager;
 import org.apache.logging.log4j.ThreadContext;
+import org.apache.logging.log4j.core.impl.Log4jLogEvent;
+import org.apache.logging.log4j.message.FormattedMessage;
 import org.apache.logging.log4j.message.StringMapMessage;
 import org.apache.logging.log4j.message.StructuredDataMessage;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-abstract class OpenTelemetryAppenderConfigTestBase {
+class OpenTelemetryAppenderTest {
 
-  static final Logger logger = LogManager.getLogger("TestLogger");
+  private static final Logger logger = LogManager.getLogger("TestLogger");
 
-  static InMemoryLogRecordExporter logRecordExporter;
-  static Resource resource;
-  static InstrumentationScopeInfo instrumentationScopeInfo;
-  static OpenTelemetry openTelemetry;
+  private static InMemoryLogRecordExporter logRecordExporter;
+  private static Resource resource;
+  private static InstrumentationScopeInfo instrumentationScopeInfo;
+  private static OpenTelemetry openTelemetry;
+
+  @BeforeAll
+  static void setupAll() {
+    logRecordExporter = InMemoryLogRecordExporter.create();
+    resource = Resource.getDefault();
+    instrumentationScopeInfo = InstrumentationScopeInfo.create("TestLogger");
+
+    SdkLoggerProvider loggerProvider =
+        SdkLoggerProvider.builder()
+            .setResource(resource)
+            .addLogRecordProcessor(SimpleLogRecordProcessor.create(logRecordExporter))
+            .build();
+
+    openTelemetry = OpenTelemetrySdk.builder().setLoggerProvider(loggerProvider).build();
+    OpenTelemetryAppender.install(openTelemetry);
+  }
 
   @BeforeEach
   void setup() {
@@ -50,6 +73,31 @@ abstract class OpenTelemetryAppenderConfigTestBase {
     ThreadContext.clearAll();
   }
 
+  @AfterAll
+  static void cleanupAll() {
+    // This is to make sure that other test classes don't have issues with the logger provider set
+    OpenTelemetryAppender.install(null);
+  }
+
+  @Test
+  void initializeWithBuilder() {
+    OpenTelemetryAppender appender =
+        OpenTelemetryAppender.builder()
+            .setName("OpenTelemetryAppender")
+            .setOpenTelemetry(openTelemetry)
+            .build();
+    appender.start();
+
+    appender.append(
+        Log4jLogEvent.newBuilder()
+            .setMessage(new FormattedMessage("log message 1", (Object) null))
+            .build());
+
+    List<LogRecordData> logDataList = logRecordExporter.getFinishedLogRecordItems();
+    assertThat(logDataList)
+        .satisfiesExactly(logRecordData -> assertThat(logDataList.get(0)).hasBody("log message 1"));
+  }
+
   @Test
   void logNoSpan() {
     logger.info("log message 1");

+ 0 - 0
instrumentation/log4j/log4j-appender-2.17/library/src/test/resources/log4j2-test.xml → instrumentation/log4j/log4j-appender-2.17/library/src/test/resources/log4j2.xml


+ 20 - 0
instrumentation/logback/logback-appender-1.0/library/README.md

@@ -60,3 +60,23 @@ The following demonstrates how you might configure the appender in your `logback
 
 In this example Logback log events will be sent to both the console appender and
 the `OpenTelemetryAppender`.
+
+In order to function, `OpenTelemetryAppender` needs access to an `OpenTelemetry` instance. This must
+be set programmatically during application startup as follows:
+
+```java
+import io.opentelemetry.instrumentation.logback.OpenTelemetryAppender;
+import io.opentelemetry.sdk.OpenTelemetrySdk;
+
+public class Application {
+
+  public static void main(String[] args) {
+    OpenTelemetrySdk openTelemetrySdk = // Configure OpenTelemetrySdk
+
+    // Find OpenTelemetryAppender in logback configuration and install openTelemetrySdk
+    OpenTelemetryAppender.install(openTelemetrySdk);
+
+    // ... proceed with application
+  }
+}
+```

+ 39 - 2
instrumentation/logback/logback-appender-1.0/library/src/main/java/io/opentelemetry/instrumentation/logback/appender/v1_0/OpenTelemetryAppender.java

@@ -7,13 +7,16 @@ package io.opentelemetry.instrumentation.logback.appender.v1_0;
 
 import static java.util.Collections.emptyList;
 
+import ch.qos.logback.classic.LoggerContext;
 import ch.qos.logback.classic.spi.ILoggingEvent;
 import ch.qos.logback.core.UnsynchronizedAppenderBase;
-import io.opentelemetry.api.GlobalOpenTelemetry;
+import io.opentelemetry.api.OpenTelemetry;
 import io.opentelemetry.instrumentation.logback.appender.v1_0.internal.LoggingEventMapper;
 import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
+import org.slf4j.ILoggerFactory;
+import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
 
 public class OpenTelemetryAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {
@@ -24,10 +27,33 @@ public class OpenTelemetryAppender extends UnsynchronizedAppenderBase<ILoggingEv
   private boolean captureKeyValuePairAttributes = false;
   private List<String> captureMdcAttributes = emptyList();
 
+  private OpenTelemetry openTelemetry;
   private LoggingEventMapper mapper;
 
   public OpenTelemetryAppender() {}
 
+  /**
+   * Installs the {@code openTelemetry} instance on any {@link OpenTelemetryAppender}s identified in
+   * the {@link LoggerContext}.
+   */
+  public static void install(OpenTelemetry openTelemetry) {
+    ILoggerFactory loggerFactorySpi = LoggerFactory.getILoggerFactory();
+    if (!(loggerFactorySpi instanceof LoggerContext)) {
+      return;
+    }
+    LoggerContext loggerContext = (LoggerContext) loggerFactorySpi;
+    for (ch.qos.logback.classic.Logger logger : loggerContext.getLoggerList()) {
+      logger
+          .iteratorForAppenders()
+          .forEachRemaining(
+              appender -> {
+                if (appender instanceof OpenTelemetryAppender) {
+                  ((OpenTelemetryAppender) appender).setOpenTelemetry(openTelemetry);
+                }
+              });
+    }
+  }
+
   @Override
   public void start() {
     mapper =
@@ -37,12 +63,15 @@ public class OpenTelemetryAppender extends UnsynchronizedAppenderBase<ILoggingEv
             captureCodeAttributes,
             captureMarkerAttribute,
             captureKeyValuePairAttributes);
+    if (openTelemetry == null) {
+      openTelemetry = OpenTelemetry.noop();
+    }
     super.start();
   }
 
   @Override
   protected void append(ILoggingEvent event) {
-    mapper.emit(GlobalOpenTelemetry.get().getLogsBridge(), event);
+    mapper.emit(openTelemetry.getLogsBridge(), event);
   }
 
   /**
@@ -93,6 +122,14 @@ public class OpenTelemetryAppender extends UnsynchronizedAppenderBase<ILoggingEv
     }
   }
 
+  /**
+   * Configures the {@link OpenTelemetry} used to append logs. This MUST be called for the appender
+   * to function. See {@link #install(OpenTelemetry)} for simple installation option.
+   */
+  public void setOpenTelemetry(OpenTelemetry openTelemetry) {
+    this.openTelemetry = openTelemetry;
+  }
+
   // copied from SDK's DefaultConfigProperties
   private static List<String> filterBlanksAndNulls(String[] values) {
     return Arrays.stream(values)

+ 3 - 3
instrumentation/logback/logback-appender-1.0/library/src/slf4j2ApiTest/java/io/opentelemetry/instrumentation/logback/appender/v1_0/Slf4j2Test.java

@@ -7,7 +7,6 @@ package io.opentelemetry.instrumentation.logback.appender.v1_0;
 
 import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
 
-import io.opentelemetry.api.GlobalOpenTelemetry;
 import io.opentelemetry.api.common.AttributeKey;
 import io.opentelemetry.sdk.OpenTelemetrySdk;
 import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
@@ -43,9 +42,10 @@ public class Slf4j2Test {
             .setResource(resource)
             .addLogRecordProcessor(SimpleLogRecordProcessor.create(logRecordExporter))
             .build();
+    OpenTelemetrySdk openTelemetrySdk =
+        OpenTelemetrySdk.builder().setLoggerProvider(loggerProvider).build();
 
-    GlobalOpenTelemetry.resetForTest();
-    GlobalOpenTelemetry.set(OpenTelemetrySdk.builder().setLoggerProvider(loggerProvider).build());
+    OpenTelemetryAppender.install(openTelemetrySdk);
   }
 
   @BeforeEach

+ 6 - 6
instrumentation/logback/logback-appender-1.0/library/src/test/java/io/opentelemetry/instrumentation/logback/appender/v1_0/OpenTelemetryAppenderConfigTest.java → instrumentation/logback/logback-appender-1.0/library/src/test/java/io/opentelemetry/instrumentation/logback/appender/v1_0/OpenTelemetryAppenderTest.java

@@ -7,7 +7,6 @@ package io.opentelemetry.instrumentation.logback.appender.v1_0;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import io.opentelemetry.api.GlobalOpenTelemetry;
 import io.opentelemetry.api.common.AttributeKey;
 import io.opentelemetry.api.logs.Severity;
 import io.opentelemetry.api.trace.Span;
@@ -35,7 +34,7 @@ import org.slf4j.MDC;
 import org.slf4j.Marker;
 import org.slf4j.MarkerFactory;
 
-class OpenTelemetryAppenderConfigTest {
+class OpenTelemetryAppenderTest {
 
   private static final Logger logger = LoggerFactory.getLogger("TestLogger");
 
@@ -54,9 +53,10 @@ class OpenTelemetryAppenderConfigTest {
             .setResource(resource)
             .addLogRecordProcessor(SimpleLogRecordProcessor.create(logRecordExporter))
             .build();
+    OpenTelemetrySdk openTelemetrySdk =
+        OpenTelemetrySdk.builder().setLoggerProvider(loggerProvider).build();
 
-    GlobalOpenTelemetry.resetForTest();
-    GlobalOpenTelemetry.set(OpenTelemetrySdk.builder().setLoggerProvider(loggerProvider).build());
+    OpenTelemetryAppender.install(openTelemetrySdk);
   }
 
   @BeforeEach
@@ -130,12 +130,12 @@ class OpenTelemetryAppenderConfigTest {
         .contains("logWithExtras");
 
     String file = logData.getAttributes().get(SemanticAttributes.CODE_FILEPATH);
-    assertThat(file).isEqualTo("OpenTelemetryAppenderConfigTest.java");
+    assertThat(file).isEqualTo("OpenTelemetryAppenderTest.java");
 
     String codeClass = logData.getAttributes().get(SemanticAttributes.CODE_NAMESPACE);
     assertThat(codeClass)
         .isEqualTo(
-            "io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppenderConfigTest");
+            "io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppenderTest");
 
     String method = logData.getAttributes().get(SemanticAttributes.CODE_FUNCTION);
     assertThat(method).isEqualTo("logWithExtras");