diff --git a/extensions/logging/log4j2_extensions/README.md b/extensions/logging/log4j2_extensions/README.md
deleted file mode 100644
index a7023f58437..00000000000
--- a/extensions/logging/log4j2_extensions/README.md
+++ /dev/null
@@ -1,57 +0,0 @@
-OpenTelemetry Extensions for Log4j 2.x
-======================================================
-
-[![Javadocs][javadoc-image]][javadoc-url]
-
-This module contains extensions that support adding trace correlation information to your
-Log4j logs. Several modules are included.
-
-# Context Data Provider
-
-An implementation of the Log4J `ContextDataProvider` class is included. This class is loaded
-automatically via the Java ServiceProvider interface, so it works as long as this library is in
-your runtime classpath. This class will add three fields to the [thread context](https://logging.apache.org/log4j/2.x/manual/thread-context.html)
-for each log entry that happens within an open span. These fields can be addressed from Log4j
-layouts. For example, this `PatternLayout` configuration will add request correlation fields to
-your logs:
-
-```xml
-
-```
-
-Similarly request correlation flags can be added to the JsonLayout:
-
-```xml
-
-
-
-
-
-```
-
-# Open Telemetry JSON Layout
-
-This module also includes a layout component, though it's output format is
-provisional and subject to change. To enable it, you must add
-`io.opentelemetry.contrib.logging.log4j2` to the `packages` attribute of the
-`Configuration` element in your log4j configuration file. You can then use
-the `` element as a layout. An example configuration
-to output to standard output would be:
-
-```xml
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-[javadoc-image]: https://www.javadoc.io/badge/io.opentelemetry/opentelemetry-contrib-logging-log4j2-extensions.svg
-[javadoc-url]: https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-contrib-logging-log4j2-extensions
diff --git a/extensions/logging/log4j2_extensions/build.gradle b/extensions/logging/log4j2_extensions/build.gradle
deleted file mode 100644
index e17178ce227..00000000000
--- a/extensions/logging/log4j2_extensions/build.gradle
+++ /dev/null
@@ -1,27 +0,0 @@
-plugins {
- id "java"
- id "maven-publish"
-
- id "ru.vyarus.animalsniffer"
-}
-
-description = 'OpenTelemetry Contrib Log4j 2.x Extensions'
-ext.moduleName = "io.opentelemetry.extensions.logging.log4j2"
-
-dependencies {
- api project(':opentelemetry-api')
- api group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.3'
- api group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.3'
- implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.10.4'
-
- testImplementation project(':opentelemetry-sdk')
- testImplementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.3', classifier: 'tests'
- testImplementation group: 'com.google.code.gson', name: 'gson', version: '2.8.6'
- // For log4j async
- testImplementation group: 'com.lmax', name: 'disruptor', version: '3.4.2'
-
- annotationProcessor libraries.auto_value
-
- signature "org.codehaus.mojo.signature:java17:1.0@signature"
- signature "net.sf.androidscents.signature:android-api-level-24:7.0_r2@signature"
-}
diff --git a/extensions/logging/log4j2_extensions/src/main/java/io/opentelemetry/contrib/logging/log4j2/OpenTelemetryJsonLayout.java b/extensions/logging/log4j2_extensions/src/main/java/io/opentelemetry/contrib/logging/log4j2/OpenTelemetryJsonLayout.java
deleted file mode 100644
index 73fc3f3a53c..00000000000
--- a/extensions/logging/log4j2_extensions/src/main/java/io/opentelemetry/contrib/logging/log4j2/OpenTelemetryJsonLayout.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2020, OpenTelemetry 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
- *
- * http://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 io.opentelemetry.contrib.logging.log4j2;
-
-import com.fasterxml.jackson.core.JsonFactory;
-import com.fasterxml.jackson.core.JsonGenerator;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.config.plugins.Plugin;
-import org.apache.logging.log4j.core.config.plugins.PluginFactory;
-import org.apache.logging.log4j.core.layout.AbstractStringLayout;
-import org.apache.logging.log4j.core.time.Instant;
-import org.apache.logging.log4j.core.util.StringBuilderWriter;
-import org.apache.logging.log4j.spi.StandardLevel;
-import org.apache.logging.log4j.util.ReadOnlyStringMap;
-import org.apache.logging.log4j.util.Strings;
-
-/**
- * This class implements a JSON layout for Log4j 2.x that will include request correlation
- * information in the form of traceid, spanid, and traceflags fields. The format is provisional, but
- * is designed to mirror the Log
- * Data Model
- */
-@Plugin(name = "OpenTelemetryJsonLayout", category = "Core", elementType = "layout")
-public class OpenTelemetryJsonLayout extends AbstractStringLayout {
- JsonFactory factory = new JsonFactory();
-
- protected OpenTelemetryJsonLayout() {
- super(StandardCharsets.UTF_8);
- }
-
- @Override
- public String toSerializable(LogEvent event) {
- StringBuilderWriter writer = new StringBuilderWriter();
- try {
- ReadOnlyStringMap contextData = event.getContextData();
- JsonGenerator generator = factory.createGenerator(writer);
- generator.writeStartObject();
- writeTimestamp(generator, event.getInstant());
-
- generator.writeFieldName("name");
- generator.writeString(event.getLoggerName());
-
- generator.writeFieldName("body");
- generator.writeString(event.getMessage().getFormattedMessage());
-
- generator.writeFieldName("severitytext");
- generator.writeString(event.getLevel().name());
-
- generator.writeFieldName("severitynumber");
- generator.writeNumber(decodeSeverity(event.getLevel()));
-
- if (contextData.containsKey("traceid")) {
- writeRequestCorrelation(generator, contextData);
- }
- generator.writeEndObject();
- generator.close();
- return writer.toString();
- } catch (IOException e) {
- LOGGER.error(e);
- return Strings.EMPTY;
- }
- }
-
- private static int decodeSeverity(Level level) {
- int intLevel = level.intLevel();
- if (intLevel <= StandardLevel.FATAL.intLevel() && intLevel > 0) {
- return OpenTelemetryLogLevels.FATAL.asInt();
- } else if (intLevel <= StandardLevel.ERROR.intLevel()) {
- return OpenTelemetryLogLevels.ERROR.asInt();
- } else if (intLevel <= StandardLevel.WARN.intLevel()) {
- return OpenTelemetryLogLevels.WARN.asInt();
- } else if (intLevel <= StandardLevel.INFO.intLevel()) {
- return OpenTelemetryLogLevels.INFO.asInt();
- } else if (intLevel <= StandardLevel.DEBUG.intLevel()) {
- return OpenTelemetryLogLevels.DEBUG.asInt();
- } else if (intLevel <= StandardLevel.TRACE.intLevel()) {
- return OpenTelemetryLogLevels.TRACE.asInt();
- } else {
- return OpenTelemetryLogLevels.UNSET.asInt();
- }
- }
-
- private static void writeRequestCorrelation(
- JsonGenerator generator, ReadOnlyStringMap contextData) throws IOException {
- generator.writeFieldName("traceid");
- generator.writeString(contextData.getValue("traceid").toString());
- generator.writeFieldName("spanid");
- generator.writeString(contextData.getValue("spanid").toString());
- generator.writeFieldName("traceflags");
- generator.writeNumber(contextData.getValue("traceflags").toString());
- }
-
- private static void writeTimestamp(JsonGenerator generator, Instant instant) throws IOException {
- generator.writeFieldName("timestamp");
- generator.writeStartObject();
- generator.writeFieldName("millis");
- generator.writeNumber(instant.getEpochMillisecond());
- int nanos = instant.getNanoOfMillisecond();
- if (nanos > 0) {
- generator.writeFieldName("nanos");
- generator.writeNumber(instant.getNanoOfMillisecond());
- }
- generator.writeEndObject();
- }
-
- @PluginFactory
- public static OpenTelemetryJsonLayout build() {
- return new OpenTelemetryJsonLayout();
- }
-}
diff --git a/extensions/logging/log4j2_extensions/src/main/java/io/opentelemetry/contrib/logging/log4j2/OpenTelemetryLogLevels.java b/extensions/logging/log4j2_extensions/src/main/java/io/opentelemetry/contrib/logging/log4j2/OpenTelemetryLogLevels.java
deleted file mode 100644
index e65fafe4b2c..00000000000
--- a/extensions/logging/log4j2_extensions/src/main/java/io/opentelemetry/contrib/logging/log4j2/OpenTelemetryLogLevels.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2020, OpenTelemetry 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
- *
- * http://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 io.opentelemetry.contrib.logging.log4j2;
-
-/**
- * This enumerates the log levels defined in the log
- * data model.
- */
-public enum OpenTelemetryLogLevels {
- UNSET(0),
- TRACE(1),
- TRACE2(2),
- TRACE3(3),
- TRACE4(4),
- DEBUG(5),
- DEBUG2(6),
- DEBUG3(7),
- DEBUG4(8),
- INFO(9),
- INFO2(10),
- INFO3(11),
- INFO4(12),
- WARN(13),
- WARN2(14),
- WARN3(15),
- WARN4(16),
- ERROR(17),
- ERROR2(18),
- ERROR3(19),
- ERROR4(20),
- FATAL(21),
- FATAL2(22),
- FATAL3(23),
- FATAL4(24),
- ;
-
- private final int intLevel;
-
- OpenTelemetryLogLevels(int intLevel) {
- this.intLevel = intLevel;
- }
-
- public int asInt() {
- return intLevel;
- }
-}
diff --git a/extensions/logging/log4j2_extensions/src/main/java/io/opentelemetry/contrib/logging/log4j2/TraceContextDataProvider.java b/extensions/logging/log4j2_extensions/src/main/java/io/opentelemetry/contrib/logging/log4j2/TraceContextDataProvider.java
deleted file mode 100644
index cdac0386784..00000000000
--- a/extensions/logging/log4j2_extensions/src/main/java/io/opentelemetry/contrib/logging/log4j2/TraceContextDataProvider.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2020, OpenTelemetry 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
- *
- * http://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 io.opentelemetry.contrib.logging.log4j2;
-
-import io.opentelemetry.trace.Span;
-import io.opentelemetry.trace.SpanContext;
-import io.opentelemetry.trace.TracingContextUtils;
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.logging.log4j.core.util.ContextDataProvider;
-
-/**
- * This ContextDataProvider is loaded via the ServiceProvider facility. {@link #supplyContextData()}
- * is called when a log entry is created.
- */
-public class TraceContextDataProvider implements ContextDataProvider {
- /**
- * This method is called on the creation of a log event, and is called in the same thread as the
- * call to the logger. This allows us to pull out request correlation information and make it
- * available to a layout, even if the logger is using an {@link
- * org.apache.logging.log4j.core.appender.AsyncAppender}
- *
- * @return A map containing string versions of the traceid, spanid, and traceflags which can then
- * be accessed from layout components
- * @see OpenTelemetryJsonLayout
- */
- @Override
- public Map supplyContextData() {
- Span span = TracingContextUtils.getCurrentSpan();
- Map map = new HashMap<>();
- if (span != null && span.getContext().isValid()) {
- SpanContext context = span.getContext();
- if (context != null && context.isValid()) {
- map.put("traceid", span.getContext().getTraceId().toLowerBase16());
- map.put("spanid", span.getContext().getSpanId().toLowerBase16());
- map.put("traceflags", span.getContext().getTraceFlags().toLowerBase16());
- }
- }
- return map;
- }
-}
diff --git a/extensions/logging/log4j2_extensions/src/main/resources/META-INF/services/org.apache.logging.log4j.core.util.ContextDataProvider b/extensions/logging/log4j2_extensions/src/main/resources/META-INF/services/org.apache.logging.log4j.core.util.ContextDataProvider
deleted file mode 100644
index 6f9c7315db3..00000000000
--- a/extensions/logging/log4j2_extensions/src/main/resources/META-INF/services/org.apache.logging.log4j.core.util.ContextDataProvider
+++ /dev/null
@@ -1 +0,0 @@
-io.opentelemetry.contrib.logging.log4j2.TraceContextDataProvider
diff --git a/extensions/logging/log4j2_extensions/src/test/java/io/opentelemetry/contrib/logging/log4j2/OpenTelemetryJsonLayoutTest.java b/extensions/logging/log4j2_extensions/src/test/java/io/opentelemetry/contrib/logging/log4j2/OpenTelemetryJsonLayoutTest.java
deleted file mode 100644
index f244ab980f2..00000000000
--- a/extensions/logging/log4j2_extensions/src/test/java/io/opentelemetry/contrib/logging/log4j2/OpenTelemetryJsonLayoutTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2020, OpenTelemetry 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
- *
- * http://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 io.opentelemetry.contrib.logging.log4j2;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import com.google.gson.Gson;
-import io.opentelemetry.OpenTelemetry;
-import io.opentelemetry.context.Scope;
-import io.opentelemetry.trace.Span;
-import io.opentelemetry.trace.Tracer;
-import java.util.List;
-import java.util.Map;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
-import org.junit.Rule;
-import org.junit.Test;
-
-public class OpenTelemetryJsonLayoutTest {
- @Rule public LoggerContextRule init = new LoggerContextRule("OpenTelemetryJsonLayoutConfig.xml");
- private final Gson gson = new Gson();
-
- @Test
- public void testOpenTelemetryJsonLayoutDefaults() {
- Logger logger = init.getLogger("DefaultJsonLogger");
- ListAppender appender = init.getListAppender("Defaults");
- double logTime = System.currentTimeMillis();
-
- // First log outside a span
- logger.warn("test");
-
- // Now with an open span
- Tracer tracer = OpenTelemetry.getTracer("JsonLayoutTest");
- Span span = tracer.spanBuilder("a_span").startSpan();
- try (Scope scope = tracer.withSpan(span)) {
- logger.error("test 2");
- }
-
- List messages = appender.getMessages();
- String first = messages.get(0);
- Map, ?> data = gson.fromJson(first, Map.class);
- assertThat(data.get("body")).isEqualTo("test");
- assertThat(data.get("name")).isEqualTo("DefaultJsonLogger");
- Map, ?> time = (Map, ?>) data.get("timestamp");
- double eventTime = (Double) time.get("millis");
- assertThat(eventTime - logTime).isLessThanOrEqualTo(100);
- assertThat(data.get("severitytext")).isEqualTo("WARN");
- assertThat(data.get("severitynumber")).isEqualTo(13.0);
-
- assertThat(data.get("traceid")).isNull();
-
- String second = messages.get(1);
- data = gson.fromJson(second, Map.class);
- assertThat(span.getContext().getTraceId().toLowerBase16()).isEqualTo(data.get("traceid"));
- assertThat(span.getContext().getSpanId().toLowerBase16()).isEqualTo(data.get("spanid"));
- assertThat(span.getContext().getTraceFlags().toLowerBase16()).isEqualTo(data.get("traceflags"));
- }
-}
diff --git a/extensions/logging/log4j2_extensions/src/test/java/io/opentelemetry/contrib/logging/log4j2/TraceContextDataProviderTest.java b/extensions/logging/log4j2_extensions/src/test/java/io/opentelemetry/contrib/logging/log4j2/TraceContextDataProviderTest.java
deleted file mode 100644
index 1b83472c381..00000000000
--- a/extensions/logging/log4j2_extensions/src/test/java/io/opentelemetry/contrib/logging/log4j2/TraceContextDataProviderTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2020, OpenTelemetry 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
- *
- * http://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 io.opentelemetry.contrib.logging.log4j2;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import com.google.gson.Gson;
-import io.opentelemetry.OpenTelemetry;
-import io.opentelemetry.context.Scope;
-import io.opentelemetry.trace.Span;
-import io.opentelemetry.trace.Tracer;
-import java.util.List;
-import java.util.Map;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
-import org.junit.Rule;
-import org.junit.Test;
-
-public class TraceContextDataProviderTest {
- @Rule public LoggerContextRule init = new LoggerContextRule("ContextDataProviderTestConfig.xml");
-
- @Test
- public void testLayoutWrapperSync() {
- final Logger logger = init.getLogger("SyncDataProviderTest");
- final ListAppender appender = init.getListAppender("SyncList");
- logger.warn("Test message");
- Tracer tracer = OpenTelemetry.getTracerProvider().get("ot_trace_dataprovider_test");
- Span span = tracer.spanBuilder("dataprovider_test").startSpan();
- String traceId = span.getContext().getTraceId().toLowerBase16();
- try (Scope scope = tracer.withSpan(span)) {
- logger.warn("hello");
- }
- final List events = appender.getMessages();
- assertThat(events.size()).isEqualTo(2);
- String withTrace = events.get(1);
- assertThat(withTrace).contains(traceId);
-
- String withoutTrace = events.get(0);
- assertThat(withoutTrace).contains("traceid=''");
- }
-
- @Test
- public void testLayoutWrapperAsync() throws InterruptedException {
- final Logger logger = init.getLogger("AsyncContextDataProviderTest");
- final ListAppender appender = init.getListAppender("AsyncList");
- Tracer tracer = OpenTelemetry.getTracerProvider().get("ot_trace_lookup_test");
- Span span = tracer.spanBuilder("lookup_test").startSpan();
- String traceId = span.getContext().getTraceId().toLowerBase16();
- try (Scope scope = tracer.withSpan(span)) {
- logger.warn("hello");
- }
- // Loop to get the list of Messages at max timeoutMillis
- final long timeoutMillis = 1000;
- final long endMillis = System.currentTimeMillis() + timeoutMillis;
- List events = appender.getMessages();
- while (events.size() < 1 && System.currentTimeMillis() < endMillis) {
- events = appender.getMessages();
- Thread.sleep(5);
- }
- assertThat(events.size()).isEqualTo(1);
- String withTrace = events.get(0);
-
- assertThat(withTrace).contains(String.format("traceid='%s'", traceId));
- }
-
- @Test
- public void testLayoutWrapperJson() {
- final Logger logger = init.getLogger("JsonContextDataProviderTest");
- final ListAppender appender = init.getListAppender("JsonList");
- Tracer tracer = OpenTelemetry.getTracerProvider().get("ot_trace_lookup_test");
- Span span = tracer.spanBuilder("lookup_test").startSpan();
- String traceId = span.getContext().getTraceId().toLowerBase16();
- String spanId = span.getContext().getSpanId().toLowerBase16();
- try (Scope scope = tracer.withSpan(span)) {
- logger.warn("hello");
- }
- final List events = appender.getMessages();
- assertThat(events.size()).isEqualTo(1);
- String withTrace = events.get(0);
-
- Gson gson = new Gson();
- @SuppressWarnings("unchecked")
- Map parsed = (Map) gson.fromJson(withTrace, Map.class);
- assertThat(parsed).containsEntry("traceid", traceId);
- assertThat(parsed).containsEntry("spanid", spanId);
- assertThat(parsed).containsEntry("traceflags", "01");
- }
-}
diff --git a/extensions/logging/log4j2_extensions/src/test/resources/ContextDataProviderTestConfig.xml b/extensions/logging/log4j2_extensions/src/test/resources/ContextDataProviderTestConfig.xml
deleted file mode 100644
index 4c870db7c0c..00000000000
--- a/extensions/logging/log4j2_extensions/src/test/resources/ContextDataProviderTestConfig.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/extensions/logging/log4j2_extensions/src/test/resources/OpenTelemetryJsonLayoutConfig.xml b/extensions/logging/log4j2_extensions/src/test/resources/OpenTelemetryJsonLayoutConfig.xml
deleted file mode 100644
index f9318f9d75b..00000000000
--- a/extensions/logging/log4j2_extensions/src/test/resources/OpenTelemetryJsonLayoutConfig.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/settings.gradle b/settings.gradle
index 39875eef3fe..7ad590aeab8 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -25,7 +25,6 @@ include ":opentelemetry-all",
":opentelemetry-extension-runtime-metrics",
":opentelemetry-extension-trace-propagators",
":opentelemetry-extension-trace-utils",
- ":opentelemetry-extension-logging-log4j2-extensions",
":opentelemetry-exporters-inmemory",
":opentelemetry-exporters-jaeger",
":opentelemetry-exporters-logging",