geforkt von Mirrors/Paper
ce30be9781
Change email address for some older patches to make it clear that they are MIT licensed too.
111 Zeilen
4.6 KiB
Diff
111 Zeilen
4.6 KiB
Diff
From ff0a13235b08f1c508e36951f820337a8d4e71ff Mon Sep 17 00:00:00 2001
|
|
From: Minecrell <minecrell@minecrell.net>
|
|
Date: Thu, 21 Sep 2017 19:41:20 +0200
|
|
Subject: [PATCH] Add workaround for plugins modifying the parent of the plugin
|
|
logger
|
|
|
|
Essentials uses a custom logger name ("Essentials") instead of the
|
|
plugin logger. Log messages are redirected to the plugin logger by
|
|
setting the parent of the "Essentials" logger to the plugin logger.
|
|
|
|
With our changes, the plugin logger is now also called "Essentials",
|
|
resulting in an infinite loop. Make sure plugins can't change the
|
|
parent of the plugin logger to avoid this.
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/utils/PaperPluginLogger.java b/src/main/java/com/destroystokyo/paper/utils/PaperPluginLogger.java
|
|
new file mode 100644
|
|
index 00000000..6fcc4f2c
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/utils/PaperPluginLogger.java
|
|
@@ -0,0 +1,31 @@
|
|
+package com.destroystokyo.paper.utils;
|
|
+
|
|
+import org.bukkit.plugin.PluginDescriptionFile;
|
|
+
|
|
+import java.util.logging.Level;
|
|
+import java.util.logging.LogManager;
|
|
+import java.util.logging.Logger;
|
|
+
|
|
+/**
|
|
+ * Prevents plugins (e.g. Essentials) from changing the parent of the plugin logger.
|
|
+ */
|
|
+public class PaperPluginLogger extends Logger {
|
|
+
|
|
+ public PaperPluginLogger(PluginDescriptionFile description) {
|
|
+ super(description.getPrefix() != null ? description.getPrefix() : description.getName(), null);
|
|
+ if (!LogManager.getLogManager().addLogger(this)) {
|
|
+ this.log(Level.WARNING, "Could not insert plugin logger - one was already found: {}", LogManager.getLogManager().getLogger(this.getName()));
|
|
+ }
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setParent(Logger parent) {
|
|
+ if (getParent() != null) {
|
|
+ warning("Ignoring attempt to change parent of plugin logger");
|
|
+ } else {
|
|
+ this.log(Level.FINE, "Setting plugin logger parent to {0}", parent);
|
|
+ super.setParent(parent);
|
|
+ }
|
|
+ }
|
|
+
|
|
+}
|
|
diff --git a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
|
|
index 0abad9ad..14dda205 100644
|
|
--- a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
|
|
+++ b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
|
|
@@ -50,7 +50,7 @@ public abstract class JavaPlugin extends PluginBase {
|
|
private boolean naggable = true;
|
|
private FileConfiguration newConfig = null;
|
|
private File configFile = null;
|
|
- private Logger logger = null; // Paper - PluginLogger -> Logger
|
|
+ Logger logger = null; // Paper - PluginLogger -> Logger, package-private
|
|
|
|
public JavaPlugin() {
|
|
final ClassLoader classLoader = this.getClass().getClassLoader();
|
|
@@ -277,8 +277,11 @@ public abstract class JavaPlugin extends PluginBase {
|
|
this.dataFolder = dataFolder;
|
|
this.classLoader = classLoader;
|
|
this.configFile = new File(dataFolder, "config.yml");
|
|
- // Paper - Handle plugin prefix in implementation
|
|
- this.logger = Logger.getLogger(description.getPrefix() != null ? description.getPrefix() : description.getName());
|
|
+ // Paper start
|
|
+ if (this.logger == null) {
|
|
+ this.logger = new com.destroystokyo.paper.utils.PaperPluginLogger(this.description);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
|
|
/**
|
|
diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
|
|
index ca9c7796..a7d87d2d 100644
|
|
--- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
|
|
+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
|
|
@@ -36,6 +36,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
|
|
final JavaPlugin plugin;
|
|
private JavaPlugin pluginInit;
|
|
private IllegalStateException pluginState;
|
|
+ private java.util.logging.Logger logger; // Paper - add field
|
|
|
|
// Spigot Start
|
|
static
|
|
@@ -73,6 +74,8 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
|
|
this.manifest = jar.getManifest();
|
|
this.url = file.toURI().toURL();
|
|
|
|
+ this.logger = new com.destroystokyo.paper.utils.PaperPluginLogger(description); // Paper - Register logger early
|
|
+
|
|
try {
|
|
Class<?> jarClass;
|
|
try {
|
|
@@ -187,6 +190,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
|
|
pluginState = new IllegalStateException("Initial initialization");
|
|
this.pluginInit = javaPlugin;
|
|
|
|
+ javaPlugin.logger = this.logger; // Paper - set logger
|
|
javaPlugin.init(loader, loader.server, description, dataFolder, file, this);
|
|
}
|
|
}
|
|
--
|
|
2.15.1
|
|
|