Add 1.12 support

This commit is contained in:
games647 2017-05-24 20:03:25 +02:00
parent 93b5fd1c59
commit a0d80b9ab4
No known key found for this signature in database
GPG Key ID: E9E962F08F621538
4 changed files with 56 additions and 68 deletions

View File

@ -131,7 +131,9 @@
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0-beta9</version>
<!--Minecraft 1.12 uses 2.1 and earlier versions 2.0-beta9-->
<version>2.1</version>
<!--<version>2.0-beta9</version>-->
<scope>provided</scope>
</dependency>
</dependencies>

View File

@ -1,10 +1,9 @@
package com.github.games647.colorconsole.bukkit;
import com.github.games647.colorconsole.common.CommonLogInstaller;
import com.google.common.collect.Maps;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.logging.Level;
@ -12,14 +11,13 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.DefaultConfiguration;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.bukkit.plugin.java.JavaPlugin;
public class ColorConsoleBukkit extends JavaPlugin {
private static String TERMINAL_NAME = "TerminalConsole";
private Layout<? extends Serializable> oldLayout;
@Override
@ -38,7 +36,7 @@ public class ColorConsoleBukkit extends JavaPlugin {
@Override
public void onDisable() {
//restore the old format
Appender terminalAppender = getTerminalAppender();
Appender terminalAppender = CommonLogInstaller.getTerminalAppender(TERMINAL_NAME);
Logger rootLogger = ((Logger) LogManager.getRootLogger());
ColorPluginAppender colorPluginAppender = null;
@ -54,11 +52,15 @@ public class ColorConsoleBukkit extends JavaPlugin {
rootLogger.addAppender(colorPluginAppender.getOldAppender());
}
setLayout(oldLayout);
try {
CommonLogInstaller.setLayout(oldLayout, terminalAppender);
} catch (ReflectiveOperationException ex) {
getLogger().log(Level.WARNING, "Cannot revert log format", ex);
}
}
private void installLogFormat() {
Appender terminalAppender = getTerminalAppender();
Appender terminalAppender = CommonLogInstaller.getTerminalAppender(TERMINAL_NAME);
oldLayout = terminalAppender.getLayout();
String logFormat = getConfig().getString("logFormat");
@ -75,9 +77,13 @@ public class ColorConsoleBukkit extends JavaPlugin {
String dateStyle = getConfig().getString("dateStyle");
logFormat = logFormat.replaceFirst("(%d)\\{.{1,}\\}", "%style{$0}{" + dateStyle + "}");
PatternLayout layout = PatternLayout
.createLayout(logFormat, new DefaultConfiguration(), null, Charset.defaultCharset().name(), "true");
setLayout(layout);
try {
PatternLayout layout = CommonLogInstaller.createLayout(logFormat);
CommonLogInstaller.setLayout(layout, terminalAppender);
} catch (ReflectiveOperationException ex) {
getLogger().log(Level.WARNING, "Cannot install log format", ex);
}
if (getConfig().getBoolean("colorPluginTag")) {
Logger rootLogger = ((Logger) LogManager.getRootLogger());
@ -99,23 +105,4 @@ public class ColorConsoleBukkit extends JavaPlugin {
rootLogger.addAppender(pluginAppender);
}
}
private void setLayout(Layout<? extends Serializable> layout) {
Appender terminalAppender = getTerminalAppender();
try {
Field field = terminalAppender.getClass().getSuperclass().getDeclaredField("layout");
field.setAccessible(true);
field.set(terminalAppender, layout);
} catch (Exception ex) {
getLogger().log(Level.SEVERE, "Failed to install log format", ex);
}
}
private Appender getTerminalAppender() {
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration conf = ctx.getConfiguration();
return conf.getAppenders().get("TerminalConsole");
}
}

View File

@ -1,5 +1,6 @@
package com.github.games647.colorconsole.common;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Map;
@ -12,6 +13,7 @@ import org.apache.logging.log4j.message.Message;
public abstract class ColorAppender extends AbstractAppender {
private final Appender oldAppender;
private Method loggerClassGetter;
protected final CommonFormatter formatter;
@ -20,6 +22,15 @@ public abstract class ColorAppender extends AbstractAppender {
this.oldAppender = oldAppender;
this.formatter = new CommonFormatter(hideMessages, colorizeTag);
for (Method method : LogEvent.class.getDeclaredMethods()) {
String methodName = method.getName();
if (methodName.equalsIgnoreCase("getLoggerFqcn")
|| methodName.equalsIgnoreCase("getFQCN")) {
loggerClassGetter = method;
method.setAccessible(true);
}
}
}
public void initPluginColors(Map<String, String> configColors, String def) {
@ -43,10 +54,18 @@ public abstract class ColorAppender extends AbstractAppender {
protected abstract Collection<String> loadPluginNames();
protected LogEvent clone(LogEvent oldEvent, String loggerName, Message message) {
return new Log4jLogEvent(loggerName, oldEvent.getMarker(), oldEvent.getFQCN()
, oldEvent.getLevel(), message, oldEvent.getThrown()
, oldEvent.getContextMap(), oldEvent.getContextStack()
, oldEvent.getThreadName(), oldEvent.getSource(), oldEvent.getMillis());
String className = null;
if (loggerClassGetter != null) {
try {
className = (String) loggerClassGetter.invoke(oldEvent);
} catch (ReflectiveOperationException refEx) {
//if this method cannot be found then the other methods wouldn't work neither
loggerClassGetter = null;
}
}
return new Log4jLogEvent(loggerName, oldEvent.getMarker(), className
, oldEvent.getLevel(), message, oldEvent.getThrown());
}
public Appender getOldAppender() {

View File

@ -1,7 +1,11 @@
package com.github.games647.colorconsole.sponge;
import com.github.games647.colorconsole.common.CommonLogInstaller;
import com.google.inject.Inject;
import java.io.IOException;
import java.nio.file.Path;
import ninja.leaping.configurate.commented.CommentedConfigurationNode;
import ninja.leaping.configurate.hocon.HoconConfigurationLoader;
import ninja.leaping.configurate.loader.ConfigurationLoader;
@ -10,10 +14,6 @@ import ninja.leaping.configurate.objectmapping.ObjectMappingException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.DefaultConfiguration;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.slf4j.Logger;
import org.spongepowered.api.config.DefaultConfig;
@ -21,17 +21,13 @@ import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.game.state.GamePreInitializationEvent;
import org.spongepowered.api.plugin.Plugin;
import java.io.IOException;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.nio.charset.Charset;
import java.nio.file.Path;
@Plugin(id = "colorconsole", name = "ColorConsole", version = "1.9"
, url = "https://github.com/games647/ColorConsole/"
, description = "Print colorful console messages depending on the logging level")
public class ColorConsoleSponge {
private static String TERMINAL_NAME = "FmlConsole";
private final Logger logger;
@Inject
@ -81,7 +77,7 @@ public class ColorConsoleSponge {
}
private void installLogFormat() {
Appender terminalAppender = getTerminalAppender();
Appender terminalAppender = CommonLogInstaller.getTerminalAppender(TERMINAL_NAME);
String logFormat = configMapper.getInstance().getLogFormat();
if (configMapper.getInstance().isColorLoggingLevel()) {
@ -97,9 +93,12 @@ public class ColorConsoleSponge {
String dateStyle = configMapper.getInstance().getDateStyle();
logFormat = logFormat.replaceFirst("(%d)\\{.{1,}\\}", "%style{$0}{" + dateStyle + "}");
PatternLayout layout = PatternLayout
.createLayout(logFormat, new DefaultConfiguration(), null, Charset.defaultCharset().name(), "true");
setLayout(layout);
try {
PatternLayout layout = CommonLogInstaller.createLayout(logFormat);
CommonLogInstaller.setLayout(layout, terminalAppender);
} catch (ReflectiveOperationException ex) {
logger.warn("Cannot install log format", ex);
}
if (configMapper.getInstance().isColorPluginTag()) {
org.apache.logging.log4j.core.Logger rootLogger = ((org.apache.logging.log4j.core.Logger) LogManager
@ -113,23 +112,4 @@ public class ColorConsoleSponge {
rootLogger.addAppender(pluginAppender);
}
}
private void setLayout(Layout<? extends Serializable> layout) {
Appender terminalAppender = getTerminalAppender();
try {
Field field = terminalAppender.getClass().getSuperclass().getDeclaredField("layout");
field.setAccessible(true);
field.set(terminalAppender, layout);
} catch (Exception ex) {
logger.error("Failed to install log format", ex);
}
}
private Appender getTerminalAppender() {
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration conf = ctx.getConfiguration();
return conf.getAppenders().get("FmlConsole");
}
}