diff --git a/patches/server/Deobfuscate-stacktraces-in-log-messages-crash-report.patch b/patches/server/Deobfuscate-stacktraces-in-log-messages-crash-report.patch
index 48dbb5c1eb..9c1f9938d3 100644
--- a/patches/server/Deobfuscate-stacktraces-in-log-messages-crash-report.patch
+++ b/patches/server/Deobfuscate-stacktraces-in-log-messages-crash-report.patch
@@ -497,25 +497,18 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
--- a/src/main/resources/log4j2.xml
+++ b/src/main/resources/log4j2.xml
@@ -0,0 +0,0 @@
-
+
++
++
+
+
-+
-+
-+
+
+
+
+-
+
-
-
-
--
--
--
-+
-
-
-
diff --git a/patches/server/Improved-Watchdog-Support.patch b/patches/server/Improved-Watchdog-Support.patch
index f479c147e7..416a219773 100644
--- a/patches/server/Improved-Watchdog-Support.patch
+++ b/patches/server/Improved-Watchdog-Support.patch
@@ -353,8 +353,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
OptionSet options = null;
+ // Paper start - preload logger classes to avoid plugins mixing versions
-+ tryPreloadClass("com.destroystokyo.paper.log.LogFullPolicy");
+ tryPreloadClass("org.apache.logging.log4j.core.Core");
++ tryPreloadClass("org.apache.logging.log4j.core.appender.AsyncAppender");
+ tryPreloadClass("org.apache.logging.log4j.core.Appender");
+ tryPreloadClass("org.apache.logging.log4j.core.ContextDataInjector");
+ tryPreloadClass("org.apache.logging.log4j.core.Filter");
diff --git a/patches/server/Rewrite-LogEvents-to-contain-the-source-jars-in-stac.patch b/patches/server/Rewrite-LogEvents-to-contain-the-source-jars-in-stac.patch
index 4edf555e0f..dd46eae415 100644
--- a/patches/server/Rewrite-LogEvents-to-contain-the-source-jars-in-stac.patch
+++ b/patches/server/Rewrite-LogEvents-to-contain-the-source-jars-in-stac.patch
@@ -233,6 +233,15 @@ diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/resources/log4j2.xml
+++ b/src/main/resources/log4j2.xml
+@@ -0,0 +0,0 @@
+
+
+
+-
++
+
+
+
@@ -0,0 +0,0 @@
@@ -244,11 +253,3 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
-
-
-
--
-+
-
-
-
diff --git a/patches/server/Use-AsyncAppender-to-keep-logging-IO-off-main-thread.patch b/patches/server/Use-AsyncAppender-to-keep-logging-IO-off-main-thread.patch
new file mode 100644
index 0000000000..2ad43fe0ea
--- /dev/null
+++ b/patches/server/Use-AsyncAppender-to-keep-logging-IO-off-main-thread.patch
@@ -0,0 +1,44 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jason Penilla <11360596+jpenilla@users.noreply.github.com>
+Date: Thu, 12 Aug 2021 04:46:41 -0700
+Subject: [PATCH] Use AsyncAppender to keep logging IO off main thread
+
+
+diff --git a/build.gradle.kts b/build.gradle.kts
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/build.gradle.kts
++++ b/build.gradle.kts
+@@ -0,0 +0,0 @@ dependencies {
+ }
+ runtimeOnly("org.xerial:sqlite-jdbc:3.34.0")
+ runtimeOnly("mysql:mysql-connector-java:8.0.23") // Paper
++ runtimeOnly("com.lmax:disruptor:3.4.4") // Paper
+
+ runtimeOnly("org.apache.maven:maven-resolver-provider:3.8.1")
+ runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.7.0")
+diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/resources/log4j2.xml
++++ b/src/main/resources/log4j2.xml
+@@ -0,0 +0,0 @@
+
+
+
++
++
++
++
++
+
+
+
+
+
+
+-
+-
+-
++
+
+
+
diff --git a/patches/server/Use-asynchronous-Log4j-2-loggers.patch b/patches/server/Use-asynchronous-Log4j-2-loggers.patch
deleted file mode 100644
index 2e4b7dd4b4..0000000000
--- a/patches/server/Use-asynchronous-Log4j-2-loggers.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Minecrell
-Date: Tue, 17 Jul 2018 16:42:17 +0200
-Subject: [PATCH] Use asynchronous Log4j 2 loggers
-
-
-diff --git a/build.gradle.kts b/build.gradle.kts
-index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
---- a/build.gradle.kts
-+++ b/build.gradle.kts
-@@ -0,0 +0,0 @@ dependencies {
- }
- runtimeOnly("org.xerial:sqlite-jdbc:3.34.0")
- runtimeOnly("mysql:mysql-connector-java:8.0.23") // Paper
-+ runtimeOnly("com.lmax:disruptor:3.4.2") // Paper
-
- runtimeOnly("org.apache.maven:maven-resolver-provider:3.8.1")
- runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.7.0")
-diff --git a/src/main/java/com/destroystokyo/paper/log/LogFullPolicy.java b/src/main/java/com/destroystokyo/paper/log/LogFullPolicy.java
-new file mode 100644
-index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
---- /dev/null
-+++ b/src/main/java/com/destroystokyo/paper/log/LogFullPolicy.java
-@@ -0,0 +0,0 @@
-+package com.destroystokyo.paper.log;
-+
-+import org.apache.logging.log4j.Level;
-+import org.apache.logging.log4j.core.async.AsyncQueueFullPolicy;
-+import org.apache.logging.log4j.core.async.EventRoute;
-+
-+public final class LogFullPolicy implements AsyncQueueFullPolicy {
-+
-+ /*
-+ * Prevents log calls being logged out of order when the log queue is full.
-+ */
-+
-+ @Override
-+ public EventRoute getRoute(final long backgroundThreadId, final Level level) {
-+ return EventRoute.ENQUEUE;
-+ }
-+}
-diff --git a/src/main/resources/log4j2.component.properties b/src/main/resources/log4j2.component.properties
-index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
---- a/src/main/resources/log4j2.component.properties
-+++ b/src/main/resources/log4j2.component.properties
-@@ -1 +1,3 @@
-+Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
-+log4j2.AsyncQueueFullPolicy="com.destroystokyo.paper.log.LogFullPolicy"
- log4j.skipJansi=true