Waterfall/BungeeCord-Patches/0033-Use-Log4j2-for-logging...

1634 lines
59 KiB
Diff

From f8b0691ca00ae4968acfacbc9d4a86ec2e078d88 Mon Sep 17 00:00:00 2001
From: Minecrell <minecrell@minecrell.net>
Date: Fri, 22 Sep 2017 12:46:47 +0200
Subject: [PATCH] Use Log4j2 for logging and TerminalConsoleAppender for
console
diff --git a/bootstrap/pom.xml b/bootstrap/pom.xml
index 15546f07..5182b664 100644
--- a/bootstrap/pom.xml
+++ b/bootstrap/pom.xml
@@ -49,6 +49,9 @@
<Main-Class>net.md_5.bungee.Bootstrap</Main-Class>
<Implementation-Version>${describe}</Implementation-Version>
<Specification-Version>${maven.build.timestamp}</Specification-Version>
+
+ <!-- Log4j includes custom classes for Java 9+ (#293) -->
+ <Multi-Release>true</Multi-Release>
</manifestEntries>
</archive>
</configuration>
@@ -76,7 +79,17 @@
</excludes>
</filter>
</filters>
+ <transformers>
+ <transformer implementation="com.github.edwgiz.maven_shade_plugin.log4j2_cache_transformer.PluginsCacheFileTransformer" />
+ </transformers>
</configuration>
+ <dependencies>
+ <dependency>
+ <groupId>com.github.edwgiz</groupId>
+ <artifactId>maven-shade-plugin.log4j2-cachefile-transformer</artifactId>
+ <version>2.15</version>
+ </dependency>
+ </dependencies>
</plugin>
</plugins>
</build>
diff --git a/log4j/pom.xml b/log4j/pom.xml
new file mode 100644
index 00000000..4bb98d5a
--- /dev/null
+++ b/log4j/pom.xml
@@ -0,0 +1,48 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>io.github.waterfallmc</groupId>
+ <artifactId>waterfall-parent</artifactId>
+ <version>1.20-R0.3-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <groupId>io.github.waterfallmc</groupId>
+ <artifactId>waterfall-log4j</artifactId>
+ <version>1.20-R0.3-SNAPSHOT</version>
+ <packaging>jar</packaging>
+
+ <name>Waterfall-Log4J</name>
+ <description>Simplistic and performant Log4j2 based logger and console API designed for use with Waterfall and Minecraft related applications.</description>
+
+ <properties>
+ <log4j2.version>2.20.0</log4j2.version>
+ </properties>
+
+ <dependencies>
+ <!-- Log4j -->
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
+ <version>${log4j2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-iostreams</artifactId>
+ <version>${log4j2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-jul</artifactId>
+ <version>${log4j2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.lmax</groupId>
+ <artifactId>disruptor</artifactId>
+ <version>3.4.4</version>
+ <scope>runtime</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/log4j/src/main/java/io/github/waterfallmc/waterfall/log4j/Log4JLogHandler.java b/log4j/src/main/java/io/github/waterfallmc/waterfall/log4j/Log4JLogHandler.java
new file mode 100644
index 00000000..63f66d3c
--- /dev/null
+++ b/log4j/src/main/java/io/github/waterfallmc/waterfall/log4j/Log4JLogHandler.java
@@ -0,0 +1,59 @@
+package io.github.waterfallmc.waterfall.log4j;
+
+import com.google.common.base.Strings;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.jul.LevelTranslator;
+import org.apache.logging.log4j.message.MessageFormatMessage;
+
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Handler;
+import java.util.logging.LogRecord;
+
+/**
+ * A {@link Handler} that forwards all log messages to the Log4J logger.
+ *
+ * <p>We don't use Log4J's custom JUL LogManager currently, because it breaks
+ * adding custom handlers to JUL loggers. Some plugins may depend on that
+ * functionality...</p>
+ */
+class Log4JLogHandler extends Handler {
+
+ private final Map<String, Logger> cache = new ConcurrentHashMap<>();
+
+ @Override
+ public void publish(LogRecord record) {
+ if (!isLoggable(record)) {
+ return;
+ }
+
+ Logger logger = cache.computeIfAbsent(Strings.nullToEmpty(record.getLoggerName()), LogManager::getLogger);
+
+ String message = record.getMessage();
+ if (record.getResourceBundle() != null) {
+ try {
+ message = record.getResourceBundle().getString(message);
+ } catch (MissingResourceException ignored) {
+ }
+ }
+
+ final Level level = LevelTranslator.toLevel(record.getLevel());
+ if (record.getParameters() != null && record.getParameters().length > 0) {
+ logger.log(level, new MessageFormatMessage(message, record.getParameters()), record.getThrown());
+ } else {
+ logger.log(level, message, record.getThrown());
+ }
+ }
+
+ @Override
+ public void flush() {
+ }
+
+ @Override
+ public void close() {
+ }
+
+}
diff --git a/log4j/src/main/java/io/github/waterfallmc/waterfall/log4j/WaterfallLogger.java b/log4j/src/main/java/io/github/waterfallmc/waterfall/log4j/WaterfallLogger.java
new file mode 100644
index 00000000..e046897a
--- /dev/null
+++ b/log4j/src/main/java/io/github/waterfallmc/waterfall/log4j/WaterfallLogger.java
@@ -0,0 +1,34 @@
+package io.github.waterfallmc.waterfall.log4j;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.io.IoBuilder;
+import java.util.logging.Handler;
+import java.util.logging.Logger;
+
+public final class WaterfallLogger {
+
+ private WaterfallLogger() {
+ }
+
+ public static Logger create() {
+ org.apache.logging.log4j.Logger redirect = LogManager.getRootLogger();
+ System.setOut(IoBuilder.forLogger(redirect).setLevel(Level.INFO).buildPrintStream());
+ System.setErr(IoBuilder.forLogger(redirect).setLevel(Level.ERROR).buildPrintStream());
+
+ Logger root = Logger.getLogger("");
+ root.setUseParentHandlers(false);
+
+ // Remove existing handlers
+ for (Handler handler : root.getHandlers()) {
+ root.removeHandler(handler);
+ }
+
+ // Setup forward log handler
+ root.setLevel(java.util.logging.Level.ALL); // Log4j will handle filtering the log
+ root.addHandler(new Log4JLogHandler());
+
+ return Logger.getLogger("BungeeCord");
+ }
+
+}
diff --git a/log4j/src/main/resources/log4j2.component.properties b/log4j/src/main/resources/log4j2.component.properties
new file mode 100644
index 00000000..e43f5dac
--- /dev/null
+++ b/log4j/src/main/resources/log4j2.component.properties
@@ -0,0 +1,2 @@
+log4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
+log4j.skipJansi=true
diff --git a/log4j/src/main/resources/log4j2.xml b/log4j/src/main/resources/log4j2.xml
new file mode 100644
index 00000000..cfd039cd
--- /dev/null
+++ b/log4j/src/main/resources/log4j2.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="warn" shutdownHook="disable">
+ <Appenders>
+ <TerminalConsole name="TerminalConsole">
+ <PatternLayout pattern="%highlightError{[%d{HH:mm:ss} %level]: %minecraftFormatting{%msg}%n%xEx}" />
+ </TerminalConsole>
+ <RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz" immediateFlush="false">
+ <PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %minecraftFormatting{%msg}{strip}%n" />
+ <Policies>
+ <TimeBasedTriggeringPolicy />
+ <OnStartupTriggeringPolicy />
+ </Policies>
+ </RollingRandomAccessFile>
+ </Appenders>
+
+ <Loggers>
+ <Root level="info">
+ <AppenderRef ref="TerminalConsole" />
+ <AppenderRef ref="File" />
+ </Root>
+ </Loggers>
+</Configuration>
diff --git a/pom.xml b/pom.xml
index a19d10da..715d3e11 100644
--- a/pom.xml
+++ b/pom.xml
@@ -48,12 +48,13 @@
<module>chat</module>
<module>config</module>
<module>event</module>
- <module>log</module>
+ <!--<module>log</module>-->
+ <module>log4j</module>
<module>module</module>
<module>protocol</module>
<module>proxy</module>
<module>query</module>
- <module>slf4j</module>
+ <!--<module>slf4j</module>-->
<module>native</module>
</modules>
diff --git a/proxy/pom.xml b/proxy/pom.xml
index 216e894e..95703fee 100644
--- a/proxy/pom.xml
+++ b/proxy/pom.xml
@@ -83,7 +83,7 @@
</dependency>
<dependency>
<groupId>io.github.waterfallmc</groupId>
- <artifactId>waterfall-log</artifactId>
+ <artifactId>waterfall-log4j</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
@@ -105,12 +105,13 @@
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
+ <!-- // Waterfall - We already bundle an slf4j impl
<dependency>
<groupId>io.github.waterfallmc</groupId>
<artifactId>waterfall-slf4j</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
- </dependency>
+ </dependency> // Waterfall - We already bundle an slf4j impl -->
<dependency>
<groupId>net.sf.jopt-simple</groupId>
<artifactId>jopt-simple</artifactId>
@@ -142,6 +143,35 @@
<version>1.9.18</version>
<scope>runtime</scope>
</dependency>
+ <!-- Waterfall start - Console improvements - bring back slf4j-->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-jdk14</artifactId>
+ <version>1.7.36</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>net.minecrell</groupId>
+ <artifactId>terminalconsoleappender</artifactId>
+ <version>1.3.0</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jline</groupId>
+ <artifactId>jline-terminal</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.jline</groupId>
+ <artifactId>jline-terminal-jansi</artifactId>
+ <version>3.21.0</version>
+ <scope>runtime</scope>
+ </dependency>
+ <!-- Waterfall end -->
</dependencies>
<!-- Waterfall start - copy license files into jar -->
diff --git a/proxy/src/main/java/io/github/waterfallmc/waterfall/console/WaterfallConsole.java b/proxy/src/main/java/io/github/waterfallmc/waterfall/console/WaterfallConsole.java
new file mode 100644
index 00000000..765d24bc
--- /dev/null
+++ b/proxy/src/main/java/io/github/waterfallmc/waterfall/console/WaterfallConsole.java
@@ -0,0 +1,39 @@
+package io.github.waterfallmc.waterfall.console;
+
+import net.md_5.bungee.BungeeCord;
+import net.md_5.bungee.api.ChatColor;
+import net.md_5.bungee.api.ProxyServer;
+import net.md_5.bungee.api.chat.ComponentBuilder;
+import net.minecrell.terminalconsole.SimpleTerminalConsole;
+import org.jline.reader.LineReader;
+import org.jline.reader.LineReaderBuilder;
+
+public final class WaterfallConsole extends SimpleTerminalConsole {
+
+ @Override
+ protected LineReader buildReader(LineReaderBuilder builder) {
+ ProxyServer proxy = ProxyServer.getInstance();
+ return super.buildReader(builder
+ .appName(proxy.getName())
+ );
+ }
+
+ @Override
+ protected boolean isRunning() {
+ return BungeeCord.getInstance().isRunning;
+ }
+
+ @Override
+ protected void runCommand(String command) {
+ ProxyServer proxy = ProxyServer.getInstance();
+ if (!proxy.getPluginManager().dispatchCommand(proxy.getConsole(), command)) {
+ proxy.getConsole().sendMessage(new ComponentBuilder("Command not found").color(ChatColor.RED).create());
+ }
+ }
+
+ @Override
+ protected void shutdown() {
+ ProxyServer.getInstance().stop();
+ }
+
+}
diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
index 7e2688ee..066e740d 100644
--- a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
+++ b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
@@ -48,7 +48,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
-import jline.console.ConsoleReader;
import lombok.Getter;
import lombok.Setter;
import lombok.Synchronized;
@@ -83,15 +82,11 @@ import net.md_5.bungee.command.CommandEnd;
import net.md_5.bungee.command.CommandIP;
import net.md_5.bungee.command.CommandPerms;
import net.md_5.bungee.command.CommandReload;
-import net.md_5.bungee.command.ConsoleCommandCompleter;
import net.md_5.bungee.command.ConsoleCommandSender;
import net.md_5.bungee.compress.CompressFactory;
import net.md_5.bungee.conf.Configuration;
import net.md_5.bungee.conf.YamlConfig;
import net.md_5.bungee.forge.ForgeConstants;
-import net.md_5.bungee.log.BungeeLogger;
-import net.md_5.bungee.log.LoggingForwardHandler;
-import net.md_5.bungee.log.LoggingOutputStream;
import net.md_5.bungee.module.ModuleManager;
import net.md_5.bungee.netty.PipelineUtils;
import net.md_5.bungee.protocol.DefinedPacket;
@@ -100,8 +95,6 @@ import net.md_5.bungee.protocol.packet.PluginMessage;
import net.md_5.bungee.query.RemoteQuery;
import net.md_5.bungee.scheduler.BungeeScheduler;
import net.md_5.bungee.util.CaseInsensitiveMap;
-import org.fusesource.jansi.AnsiConsole;
-import org.slf4j.impl.JDK14LoggerFactory;
/**
* Main BungeeCord proxy class.
@@ -161,8 +154,12 @@ public class BungeeCord extends ProxyServer
private final File pluginsFolder = new File( "plugins" );
@Getter
private final BungeeScheduler scheduler = new BungeeScheduler();
+ // Waterfall start - Remove ConsoleReader for JLine 3 update
+ /*
@Getter
private final ConsoleReader consoleReader;
+ */
+ // Waterfall end
@Getter
private final Logger logger;
public final Gson gson = new GsonBuilder()
@@ -207,6 +204,8 @@ public class BungeeCord extends ProxyServer
// BungeeCord. This version is only used when extracting the libraries to their temp folder.
System.setProperty( "library.jansi.version", "BungeeCord" );
+ // Waterfall start - Use TerminalConsoleAppender and Log4J
+ /*
AnsiConsole.systemInstall();
consoleReader = new ConsoleReader();
consoleReader.setExpandEvents( false );
@@ -231,6 +230,9 @@ public class BungeeCord extends ProxyServer
// since it applies a nice looking format and also writes to the logfile.
System.setErr( new PrintStream( new LoggingOutputStream( logger, Level.SEVERE ), true ) );
System.setOut( new PrintStream( new LoggingOutputStream( logger, Level.INFO ), true ) );
+ */
+ logger = io.github.waterfallmc.waterfall.log4j.WaterfallLogger.create();
+ // Waterfall end
pluginManager = new PluginManager( this );
getPluginManager().registerCommand( null, new CommandReload() );
@@ -507,10 +509,7 @@ public class BungeeCord extends ProxyServer
getLogger().info( "Thank you and goodbye" );
// Need to close loggers after last message!
- for ( Handler handler : getLogger().getHandlers() )
- {
- handler.close();
- }
+ org.apache.logging.log4j.LogManager.shutdown(); // Waterfall
// Unlock the thread before optionally calling system exit, which might invoke this function again.
// If that happens, the system will obtain the lock, and then see that isRunning == false and return without doing anything.
diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeCordLauncher.java b/proxy/src/main/java/net/md_5/bungee/BungeeCordLauncher.java
index c81a4430..96a9998d 100644
--- a/proxy/src/main/java/net/md_5/bungee/BungeeCordLauncher.java
+++ b/proxy/src/main/java/net/md_5/bungee/BungeeCordLauncher.java
@@ -68,6 +68,9 @@ public class BungeeCordLauncher
if ( !options.has( "noconsole" ) )
{
+ // Waterfall start - Use TerminalConsoleAppender
+ new io.github.waterfallmc.waterfall.console.WaterfallConsole().start();
+ /*
String line;
while ( bungee.isRunning && ( line = bungee.getConsoleReader().readLine( ">" ) ) != null )
{
@@ -76,6 +79,8 @@ public class BungeeCordLauncher
bungee.getConsole().sendMessage( new ComponentBuilder( "Command not found" ).color( ChatColor.RED ).create() );
}
}
+ */
+ // Waterfall end
}
}
}
diff --git a/proxy/src/main/java/net/md_5/bungee/command/ConsoleCommandCompleter.java b/proxy/src/main/java/net/md_5/bungee/command/ConsoleCommandCompleter.java
deleted file mode 100644
index 3e5ca394..00000000
--- a/proxy/src/main/java/net/md_5/bungee/command/ConsoleCommandCompleter.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package net.md_5.bungee.command;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.stream.Collectors;
-import jline.console.completer.Completer;
-import lombok.RequiredArgsConstructor;
-import net.md_5.bungee.api.ProxyServer;
-
-@RequiredArgsConstructor
-public class ConsoleCommandCompleter implements Completer
-{
-
- private final ProxyServer proxy;
-
- @Override
- public int complete(String buffer, int cursor, List<CharSequence> candidates)
- {
- int lastSpace = buffer.lastIndexOf( ' ' );
- if ( lastSpace == -1 )
- {
- String lowerCase = buffer.toLowerCase( Locale.ROOT );
- candidates.addAll( proxy.getPluginManager().getCommands().stream()
- .map( Map.Entry::getKey )
- .filter( (name) -> name.toLowerCase( Locale.ROOT ).startsWith( lowerCase ) )
- .collect( Collectors.toList() ) );
- } else
- {
- List<String> suggestions = new ArrayList<>();
- proxy.getPluginManager().dispatchCommand( proxy.getConsole(), buffer, suggestions );
- candidates.addAll( suggestions );
- }
-
- return ( lastSpace == -1 ) ? cursor - buffer.length() : cursor - ( buffer.length() - lastSpace - 1 );
- }
-}
diff --git a/proxy/src/main/java/net/md_5/bungee/module/ModuleManager.java b/proxy/src/main/java/net/md_5/bungee/module/ModuleManager.java
index 9ec4920e..d3abee44 100644
--- a/proxy/src/main/java/net/md_5/bungee/module/ModuleManager.java
+++ b/proxy/src/main/java/net/md_5/bungee/module/ModuleManager.java
@@ -44,7 +44,7 @@ public class ModuleManager
ModuleVersion bungeeVersion = ModuleVersion.parse( proxy.getVersion() );
if ( bungeeVersion == null )
{
- System.out.println( "Couldn't detect bungee version. Custom build?" );
+ proxy.getLogger().warning( "Couldn't detect bungee version. Custom build?" ); // Waterfall - Use logger
return;
}
diff --git a/slf4j/nb-configuration.xml b/slf4j/nb-configuration.xml
deleted file mode 100644
index 7e465924..00000000
--- a/slf4j/nb-configuration.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project-shared-configuration>
- <!--
- This file contains additional configuration written by modules in the NetBeans IDE.
- The configuration is intended to be shared among all the users of project and
- therefore it is assumed to be part of version control checkout.
- Without this configuration present, some functionality in the IDE may be limited or fail altogether.
- -->
- <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
- <!--
- Properties that influence various parts of the IDE, especially code formatting and the like.
- You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
- That way multiple projects can share the same settings (useful for formatting rules for example).
- Any value defined here will override the pom.xml file value but is only applicable to the current project.
- -->
- <org-netbeans-modules-editor-indent.CodeStyle.usedProfile>project</org-netbeans-modules-editor-indent.CodeStyle.usedProfile>
- <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>
- <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>
- <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>
- <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinMethodCallParens>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinMethodCallParens>
- <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinSwitchParens>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinSwitchParens>
- <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinCatchParens>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinCatchParens>
- <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinTryParens>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinTryParens>
- <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinSynchronizedParens>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinSynchronizedParens>
- <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinArrayInitBrackets>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinArrayInitBrackets>
- <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinParens>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinParens>
- <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinWhileParens>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinWhileParens>
- <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinIfParens>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinIfParens>
- <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinForParens>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceWithinForParens>
- </properties>
-</project-shared-configuration>
diff --git a/slf4j/pom.xml b/slf4j/pom.xml
deleted file mode 100644
index 1b61e3ad..00000000
--- a/slf4j/pom.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>io.github.waterfallmc</groupId>
- <artifactId>waterfall-parent</artifactId>
- <version>1.20-R0.3-SNAPSHOT</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <groupId>io.github.waterfallmc</groupId>
- <artifactId>waterfall-slf4j</artifactId>
- <version>1.20-R0.3-SNAPSHOT</version>
- <packaging>jar</packaging>
-
- <name>Waterfall-SLF4J</name>
- <description>Wrapper over SLF4J for BungeeCord purposes.</description>
-
- <properties>
- <checkstyle.skip>true</checkstyle.skip>
- <maven.deploy.skip>true</maven.deploy.skip>
- <maven.javadoc.skip>true</maven.javadoc.skip>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.7.36</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
-</project>
diff --git a/slf4j/src/main/java/org/slf4j/impl/JDK14LoggerAdapter.java b/slf4j/src/main/java/org/slf4j/impl/JDK14LoggerAdapter.java
deleted file mode 100644
index 49589454..00000000
--- a/slf4j/src/main/java/org/slf4j/impl/JDK14LoggerAdapter.java
+++ /dev/null
@@ -1,700 +0,0 @@
-/**
- * Copyright (c) 2004-2011 QOS.ch
- * All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-package org.slf4j.impl;
-
-import java.util.logging.Level;
-import java.util.logging.LogRecord;
-
-import org.slf4j.Logger;
-import org.slf4j.Marker;
-import org.slf4j.event.EventConstants;
-import org.slf4j.event.LoggingEvent;
-import org.slf4j.helpers.FormattingTuple;
-import org.slf4j.helpers.MarkerIgnoringBase;
-import org.slf4j.helpers.MessageFormatter;
-import org.slf4j.spi.LocationAwareLogger;
-
-/**
- * A wrapper over {@link java.util.logging.Logger java.util.logging.Logger} in
- * conformity with the {@link Logger} interface. Note that the logging levels
- * mentioned in this class refer to those defined in the java.util.logging
- * package.
- *
- * @author Ceki G&uuml;lc&uuml;
- * @author Peter Royal
- */
-public final class JDK14LoggerAdapter extends MarkerIgnoringBase implements LocationAwareLogger {
-
- private static final long serialVersionUID = -8053026990503422791L;
-
- transient final java.util.logging.Logger logger;
-
- // WARN: JDK14LoggerAdapter constructor should have only package access so
- // that only JDK14LoggerFactory be able to create one.
- JDK14LoggerAdapter(java.util.logging.Logger logger) {
- this.logger = logger;
- this.name = logger.getName();
- }
-
- /**
- * Is this logger instance enabled for the FINEST level?
- *
- * @return True if this Logger is enabled for level FINEST, false otherwise.
- */
- public boolean isTraceEnabled() {
- return logger.isLoggable(Level.FINEST);
- }
-
- /**
- * Log a message object at level FINEST.
- *
- * @param msg
- * - the message object to be logged
- */
- public void trace(String msg) {
- if (logger.isLoggable(Level.FINEST)) {
- log(SELF, Level.FINEST, msg, null);
- }
- }
-
- /**
- * Log a message at level FINEST according to the specified format and
- * argument.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for level FINEST.
- * </p>
- *
- * @param format
- * the format string
- * @param arg
- * the argument
- */
- public void trace(String format, Object arg) {
- if (logger.isLoggable(Level.FINEST)) {
- FormattingTuple ft = MessageFormatter.format(format, arg);
- log(SELF, Level.FINEST, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log a message at level FINEST according to the specified format and
- * arguments.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for the FINEST level.
- * </p>
- *
- * @param format
- * the format string
- * @param arg1
- * the first argument
- * @param arg2
- * the second argument
- */
- public void trace(String format, Object arg1, Object arg2) {
- if (logger.isLoggable(Level.FINEST)) {
- FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
- log(SELF, Level.FINEST, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log a message at level FINEST according to the specified format and
- * arguments.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for the FINEST level.
- * </p>
- *
- * @param format
- * the format string
- * @param argArray
- * an array of arguments
- */
- public void trace(String format, Object... argArray) {
- if (logger.isLoggable(Level.FINEST)) {
- FormattingTuple ft = MessageFormatter.arrayFormat(format, argArray);
- log(SELF, Level.FINEST, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log an exception (throwable) at level FINEST with an accompanying message.
- *
- * @param msg
- * the message accompanying the exception
- * @param t
- * the exception (throwable) to log
- */
- public void trace(String msg, Throwable t) {
- if (logger.isLoggable(Level.FINEST)) {
- log(SELF, Level.FINEST, msg, t);
- }
- }
-
- /**
- * Is this logger instance enabled for the FINE level?
- *
- * @return True if this Logger is enabled for level FINE, false otherwise.
- */
- public boolean isDebugEnabled() {
- return logger.isLoggable(Level.FINE);
- }
-
- /**
- * Log a message object at level FINE.
- *
- * @param msg
- * - the message object to be logged
- */
- public void debug(String msg) {
- if (logger.isLoggable(Level.FINE)) {
- log(SELF, Level.FINE, msg, null);
- }
- }
-
- /**
- * Log a message at level FINE according to the specified format and argument.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for level FINE.
- * </p>
- *
- * @param format
- * the format string
- * @param arg
- * the argument
- */
- public void debug(String format, Object arg) {
- if (logger.isLoggable(Level.FINE)) {
- FormattingTuple ft = MessageFormatter.format(format, arg);
- log(SELF, Level.FINE, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log a message at level FINE according to the specified format and
- * arguments.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for the FINE level.
- * </p>
- *
- * @param format
- * the format string
- * @param arg1
- * the first argument
- * @param arg2
- * the second argument
- */
- public void debug(String format, Object arg1, Object arg2) {
- if (logger.isLoggable(Level.FINE)) {
- FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
- log(SELF, Level.FINE, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log a message at level FINE according to the specified format and
- * arguments.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for the FINE level.
- * </p>
- *
- * @param format
- * the format string
- * @param argArray
- * an array of arguments
- */
- public void debug(String format, Object... argArray) {
- if (logger.isLoggable(Level.FINE)) {
- FormattingTuple ft = MessageFormatter.arrayFormat(format, argArray);
- log(SELF, Level.FINE, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log an exception (throwable) at level FINE with an accompanying message.
- *
- * @param msg
- * the message accompanying the exception
- * @param t
- * the exception (throwable) to log
- */
- public void debug(String msg, Throwable t) {
- if (logger.isLoggable(Level.FINE)) {
- log(SELF, Level.FINE, msg, t);
- }
- }
-
- /**
- * Is this logger instance enabled for the INFO level?
- *
- * @return True if this Logger is enabled for the INFO level, false otherwise.
- */
- public boolean isInfoEnabled() {
- return logger.isLoggable(Level.INFO);
- }
-
- /**
- * Log a message object at the INFO level.
- *
- * @param msg
- * - the message object to be logged
- */
- public void info(String msg) {
- if (logger.isLoggable(Level.INFO)) {
- log(SELF, Level.INFO, msg, null);
- }
- }
-
- /**
- * Log a message at level INFO according to the specified format and argument.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for the INFO level.
- * </p>
- *
- * @param format
- * the format string
- * @param arg
- * the argument
- */
- public void info(String format, Object arg) {
- if (logger.isLoggable(Level.INFO)) {
- FormattingTuple ft = MessageFormatter.format(format, arg);
- log(SELF, Level.INFO, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log a message at the INFO level according to the specified format and
- * arguments.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for the INFO level.
- * </p>
- *
- * @param format
- * the format string
- * @param arg1
- * the first argument
- * @param arg2
- * the second argument
- */
- public void info(String format, Object arg1, Object arg2) {
- if (logger.isLoggable(Level.INFO)) {
- FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
- log(SELF, Level.INFO, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log a message at level INFO according to the specified format and
- * arguments.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for the INFO level.
- * </p>
- *
- * @param format
- * the format string
- * @param argArray
- * an array of arguments
- */
- public void info(String format, Object... argArray) {
- if (logger.isLoggable(Level.INFO)) {
- FormattingTuple ft = MessageFormatter.arrayFormat(format, argArray);
- log(SELF, Level.INFO, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log an exception (throwable) at the INFO level with an accompanying
- * message.
- *
- * @param msg
- * the message accompanying the exception
- * @param t
- * the exception (throwable) to log
- */
- public void info(String msg, Throwable t) {
- if (logger.isLoggable(Level.INFO)) {
- log(SELF, Level.INFO, msg, t);
- }
- }
-
- /**
- * Is this logger instance enabled for the WARNING level?
- *
- * @return True if this Logger is enabled for the WARNING level, false
- * otherwise.
- */
- public boolean isWarnEnabled() {
- return logger.isLoggable(Level.WARNING);
- }
-
- /**
- * Log a message object at the WARNING level.
- *
- * @param msg
- * - the message object to be logged
- */
- public void warn(String msg) {
- if (logger.isLoggable(Level.WARNING)) {
- log(SELF, Level.WARNING, msg, null);
- }
- }
-
- /**
- * Log a message at the WARNING level according to the specified format and
- * argument.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for the WARNING level.
- * </p>
- *
- * @param format
- * the format string
- * @param arg
- * the argument
- */
- public void warn(String format, Object arg) {
- if (logger.isLoggable(Level.WARNING)) {
- FormattingTuple ft = MessageFormatter.format(format, arg);
- log(SELF, Level.WARNING, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log a message at the WARNING level according to the specified format and
- * arguments.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for the WARNING level.
- * </p>
- *
- * @param format
- * the format string
- * @param arg1
- * the first argument
- * @param arg2
- * the second argument
- */
- public void warn(String format, Object arg1, Object arg2) {
- if (logger.isLoggable(Level.WARNING)) {
- FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
- log(SELF, Level.WARNING, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log a message at level WARNING according to the specified format and
- * arguments.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for the WARNING level.
- * </p>
- *
- * @param format
- * the format string
- * @param argArray
- * an array of arguments
- */
- public void warn(String format, Object... argArray) {
- if (logger.isLoggable(Level.WARNING)) {
- FormattingTuple ft = MessageFormatter.arrayFormat(format, argArray);
- log(SELF, Level.WARNING, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log an exception (throwable) at the WARNING level with an accompanying
- * message.
- *
- * @param msg
- * the message accompanying the exception
- * @param t
- * the exception (throwable) to log
- */
- public void warn(String msg, Throwable t) {
- if (logger.isLoggable(Level.WARNING)) {
- log(SELF, Level.WARNING, msg, t);
- }
- }
-
- /**
- * Is this logger instance enabled for level SEVERE?
- *
- * @return True if this Logger is enabled for level SEVERE, false otherwise.
- */
- public boolean isErrorEnabled() {
- return logger.isLoggable(Level.SEVERE);
- }
-
- /**
- * Log a message object at the SEVERE level.
- *
- * @param msg
- * - the message object to be logged
- */
- public void error(String msg) {
- if (logger.isLoggable(Level.SEVERE)) {
- log(SELF, Level.SEVERE, msg, null);
- }
- }
-
- /**
- * Log a message at the SEVERE level according to the specified format and
- * argument.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for the SEVERE level.
- * </p>
- *
- * @param format
- * the format string
- * @param arg
- * the argument
- */
- public void error(String format, Object arg) {
- if (logger.isLoggable(Level.SEVERE)) {
- FormattingTuple ft = MessageFormatter.format(format, arg);
- log(SELF, Level.SEVERE, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log a message at the SEVERE level according to the specified format and
- * arguments.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for the SEVERE level.
- * </p>
- *
- * @param format
- * the format string
- * @param arg1
- * the first argument
- * @param arg2
- * the second argument
- */
- public void error(String format, Object arg1, Object arg2) {
- if (logger.isLoggable(Level.SEVERE)) {
- FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
- log(SELF, Level.SEVERE, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log a message at level SEVERE according to the specified format and
- * arguments.
- *
- * <p>
- * This form avoids superfluous object creation when the logger is disabled
- * for the SEVERE level.
- * </p>
- *
- * @param format
- * the format string
- * @param arguments
- * an array of arguments
- */
- public void error(String format, Object... arguments) {
- if (logger.isLoggable(Level.SEVERE)) {
- FormattingTuple ft = MessageFormatter.arrayFormat(format, arguments);
- log(SELF, Level.SEVERE, ft.getMessage(), ft.getThrowable());
- }
- }
-
- /**
- * Log an exception (throwable) at the SEVERE level with an accompanying
- * message.
- *
- * @param msg
- * the message accompanying the exception
- * @param t
- * the exception (throwable) to log
- */
- public void error(String msg, Throwable t) {
- if (logger.isLoggable(Level.SEVERE)) {
- log(SELF, Level.SEVERE, msg, t);
- }
- }
-
- /**
- * Log the message at the specified level with the specified throwable if any.
- * This method creates a LogRecord and fills in caller date before calling
- * this instance's JDK14 logger.
- *
- * See bug report #13 for more details.
- *
- * @param level
- * @param msg
- * @param t
- */
- private void log(String callerFQCN, Level level, String msg, Throwable t) {
- // millis and thread are filled by the constructor
- LogRecord record = new LogRecord(level, msg);
- record.setLoggerName(getName());
- record.setThrown(t);
- // Note: parameters in record are not set because SLF4J only
- // supports a single formatting style
- fillCallerData(callerFQCN, record);
- logger.log(record);
- }
-
- static String SELF = JDK14LoggerAdapter.class.getName();
- static String SUPER = MarkerIgnoringBase.class.getName();
-
- private static final boolean FILL_CALLER_DATA = Boolean.getBoolean( "net.md_5.bungee.slf4j-caller-data" );
-
- /**
- * Fill in caller data if possible.
- *
- * @param record
- * The record to update
- */
- final private void fillCallerData(String callerFQCN, LogRecord record) {
- if ( !FILL_CALLER_DATA )
- {
- return;
- }
- StackTraceElement[] steArray = new Throwable().getStackTrace();
-
- int selfIndex = -1;
- for (int i = 0; i < steArray.length; i++) {
- final String className = steArray[i].getClassName();
- if (className.equals(callerFQCN) || className.equals(SUPER)) {
- selfIndex = i;
- break;
- }
- }
-
- int found = -1;
- for (int i = selfIndex + 1; i < steArray.length; i++) {
- final String className = steArray[i].getClassName();
- if (!(className.equals(callerFQCN) || className.equals(SUPER))) {
- found = i;
- break;
- }
- }
-
- if (found != -1) {
- StackTraceElement ste = steArray[found];
- // setting the class name has the side effect of setting
- // the needToInferCaller variable to false.
- record.setSourceClassName(ste.getClassName());
- record.setSourceMethodName(ste.getMethodName());
- }
- }
-
- public void log(Marker marker, String callerFQCN, int level, String message, Object[] argArray, Throwable t) {
- Level julLevel = slf4jLevelIntToJULLevel(level);
- // the logger.isLoggable check avoids the unconditional
- // construction of location data for disabled log
- // statements. As of 2008-07-31, callers of this method
- // do not perform this check. See also
- // http://jira.qos.ch/browse/SLF4J-81
- if (logger.isLoggable(julLevel)) {
- log(callerFQCN, julLevel, message, t);
- }
- }
-
- private Level slf4jLevelIntToJULLevel(int slf4jLevelInt) {
- Level julLevel;
- switch (slf4jLevelInt) {
- case LocationAwareLogger.TRACE_INT:
- julLevel = Level.FINEST;
- break;
- case LocationAwareLogger.DEBUG_INT:
- julLevel = Level.FINE;
- break;
- case LocationAwareLogger.INFO_INT:
- julLevel = Level.INFO;
- break;
- case LocationAwareLogger.WARN_INT:
- julLevel = Level.WARNING;
- break;
- case LocationAwareLogger.ERROR_INT:
- julLevel = Level.SEVERE;
- break;
- default:
- throw new IllegalStateException("Level number " + slf4jLevelInt + " is not recognized.");
- }
- return julLevel;
- }
-
- /**
- * @since 1.7.15
- */
- public void log(LoggingEvent event) {
- Level julLevel = slf4jLevelIntToJULLevel(event.getLevel().toInt());
- if (logger.isLoggable(julLevel)) {
- LogRecord record = eventToRecord(event, julLevel);
- logger.log(record);
- }
- }
-
- private LogRecord eventToRecord(LoggingEvent event, Level julLevel) {
- String format = event.getMessage();
- Object[] arguments = event.getArgumentArray();
- FormattingTuple ft = MessageFormatter.arrayFormat(format, arguments);
- if (ft.getThrowable() != null && event.getThrowable() != null) {
- throw new IllegalArgumentException("both last element in argument array and last argument are of type Throwable");
- }
-
- Throwable t = event.getThrowable();
- if (ft.getThrowable() != null) {
- t = ft.getThrowable();
- throw new IllegalStateException("fix above code");
- }
-
- LogRecord record = new LogRecord(julLevel, ft.getMessage());
- record.setLoggerName(event.getLoggerName());
- record.setMillis(event.getTimeStamp());
- record.setSourceClassName(EventConstants.NA_SUBST);
- record.setSourceMethodName(EventConstants.NA_SUBST);
-
- record.setThrown(t);
- return record;
- }
-}
diff --git a/slf4j/src/main/java/org/slf4j/impl/JDK14LoggerFactory.java b/slf4j/src/main/java/org/slf4j/impl/JDK14LoggerFactory.java
deleted file mode 100644
index 2d6eaaf8..00000000
--- a/slf4j/src/main/java/org/slf4j/impl/JDK14LoggerFactory.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * Copyright (c) 2004-2011 QOS.ch
- * All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-package org.slf4j.impl;
-
-import org.slf4j.Logger;
-import org.slf4j.ILoggerFactory;
-
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * JDK14LoggerFactory is an implementation of {@link ILoggerFactory} returning
- * the appropriately named {@link JDK14LoggerAdapter} instance.
- *
- * @author Ceki G&uuml;lc&uuml;
- */
-public class JDK14LoggerFactory implements ILoggerFactory {
-
- // key: name (String), value: a JDK14LoggerAdapter;
- ConcurrentMap<String, Logger> loggerMap;
- public static java.util.logging.Logger LOGGER; // BungeeCord
-
- public JDK14LoggerFactory() {
- loggerMap = new ConcurrentHashMap<String, Logger>();
- // ensure jul initialization. see SLF4J-359
- // note that call to java.util.logging.LogManager.getLogManager() fails on the Google App Engine platform. See SLF4J-363
- java.util.logging.Logger.getLogger("");
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.slf4j.ILoggerFactory#getLogger(java.lang.String)
- */
- public Logger getLogger(String name) {
- // the root logger is called "" in JUL
- if (name.equalsIgnoreCase(Logger.ROOT_LOGGER_NAME)) {
- name = "";
- }
-
- Logger slf4jLogger = loggerMap.get(name);
- if (slf4jLogger != null)
- return slf4jLogger;
- else {
- java.util.logging.Logger julLogger = LOGGER; // BungeeCord - TODO: per-plugin loggers
- Logger newInstance = new JDK14LoggerAdapter(julLogger);
- Logger oldInstance = loggerMap.putIfAbsent(name, newInstance);
- return oldInstance == null ? newInstance : oldInstance;
- }
- }
-}
diff --git a/slf4j/src/main/java/org/slf4j/impl/StaticLoggerBinder.java b/slf4j/src/main/java/org/slf4j/impl/StaticLoggerBinder.java
deleted file mode 100644
index ebf8ae11..00000000
--- a/slf4j/src/main/java/org/slf4j/impl/StaticLoggerBinder.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * Copyright (c) 2004-2011 QOS.ch
- * All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-package org.slf4j.impl;
-
-import org.slf4j.ILoggerFactory;
-import org.slf4j.LoggerFactory;
-import org.slf4j.spi.LoggerFactoryBinder;
-
-/**
- * The binding of {@link LoggerFactory} class with an actual instance of
- * {@link ILoggerFactory} is performed using information returned by this class.
- *
- * @author Ceki G&uuml;lc&uuml;
- */
-public class StaticLoggerBinder implements LoggerFactoryBinder {
-
- /**
- * The unique instance of this class.
- *
- */
- private static final StaticLoggerBinder SINGLETON = new StaticLoggerBinder();
-
- /**
- * Return the singleton of this class.
- *
- * @return the StaticLoggerBinder singleton
- */
- public static final StaticLoggerBinder getSingleton() {
- return SINGLETON;
- }
-
- /**
- * Declare the version of the SLF4J API this implementation is compiled against.
- * The value of this field is modified with each major release.
- */
- // to avoid constant folding by the compiler, this field must *not* be final
- public static String REQUESTED_API_VERSION = "1.6.99"; // !final
-
- private static final String loggerFactoryClassStr = org.slf4j.impl.JDK14LoggerFactory.class.getName();
-
- /** The ILoggerFactory instance returned by the {@link #getLoggerFactory} method
- * should always be the same object
- */
- private final ILoggerFactory loggerFactory;
-
- private StaticLoggerBinder() {
- // Note: JCL gets substituted at build time by an appropriate Ant task
- loggerFactory = new org.slf4j.impl.JDK14LoggerFactory();
- }
-
- public ILoggerFactory getLoggerFactory() {
- return loggerFactory;
- }
-
- public String getLoggerFactoryClassStr() {
- return loggerFactoryClassStr;
- }
-}
diff --git a/slf4j/src/main/java/org/slf4j/impl/StaticMDCBinder.java b/slf4j/src/main/java/org/slf4j/impl/StaticMDCBinder.java
deleted file mode 100644
index 0a1dcb4c..00000000
--- a/slf4j/src/main/java/org/slf4j/impl/StaticMDCBinder.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Copyright (c) 2004-2011 QOS.ch
- * All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-package org.slf4j.impl;
-
-import org.slf4j.helpers.BasicMDCAdapter;
-import org.slf4j.spi.MDCAdapter;
-
-/**
- * This implementation is bound to {@link BasicMDCAdapter}.
- *
- * @author Ceki G&uuml;lc&uuml;
- */
-public class StaticMDCBinder {
-
- /**
- * The unique instance of this class.
- */
- public static final StaticMDCBinder SINGLETON = new StaticMDCBinder();
-
- private StaticMDCBinder() {
- }
-
- /**
- * Return the singleton of this class.
- *
- * @return the StaticMDCBinder singleton
- * @since 1.7.14
- */
- public static final StaticMDCBinder getSingleton() {
- return SINGLETON;
- }
-
- /**
- * Currently this method always returns an instance of
- * {@link BasicMDCAdapter}.
- */
- public MDCAdapter getMDCA() {
- // note that this method is invoked only from within the static initializer of
- // the org.slf4j.MDC class.
- return new BasicMDCAdapter();
- }
-
- public String getMDCAdapterClassStr() {
- return BasicMDCAdapter.class.getName();
- }
-}
diff --git a/slf4j/src/main/java/org/slf4j/impl/StaticMarkerBinder.java b/slf4j/src/main/java/org/slf4j/impl/StaticMarkerBinder.java
deleted file mode 100644
index 21a48df6..00000000
--- a/slf4j/src/main/java/org/slf4j/impl/StaticMarkerBinder.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * Copyright (c) 2004-2011 QOS.ch
- * All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-package org.slf4j.impl;
-
-import org.slf4j.IMarkerFactory;
-import org.slf4j.MarkerFactory;
-import org.slf4j.helpers.BasicMarkerFactory;
-import org.slf4j.spi.MarkerFactoryBinder;
-
-/**
- *
- * The binding of {@link MarkerFactory} class with an actual instance of
- * {@link IMarkerFactory} is performed using information returned by this class.
- *
- * @author Ceki G&uuml;lc&uuml;
- */
-public class StaticMarkerBinder implements MarkerFactoryBinder {
-
- /**
- * The unique instance of this class.
- */
- public static final StaticMarkerBinder SINGLETON = new StaticMarkerBinder();
-
- final IMarkerFactory markerFactory = new BasicMarkerFactory();
-
- private StaticMarkerBinder() {
- }
-
- /**
- * Return the singleton of this class.
- *
- * @return the StaticMarkerBinder singleton
- * @since 1.7.14
- */
- public static StaticMarkerBinder getSingleton() {
- return SINGLETON;
- }
-
- /**
- * Currently this method always returns an instance of
- * {@link BasicMarkerFactory}.
- */
- public IMarkerFactory getMarkerFactory() {
- return markerFactory;
- }
-
- /**
- * Currently, this method returns the class name of
- * {@link BasicMarkerFactory}.
- */
- public String getMarkerFactoryClassStr() {
- return BasicMarkerFactory.class.getName();
- }
-
-}
--
2.44.0