Auto-detect ansi support for log4j2
move to fml.loading subpackage Add license header
This commit is contained in:
parent
7e79243bca
commit
1af6632a29
2 changed files with 77 additions and 4 deletions
|
@ -0,0 +1,73 @@
|
||||||
|
/*
|
||||||
|
* Minecraft Forge
|
||||||
|
* Copyright (c) 2016-2020.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.minecraftforge.fml.loading.log4j;
|
||||||
|
|
||||||
|
import net.minecrell.terminalconsole.HighlightErrorConverter;
|
||||||
|
import net.minecrell.terminalconsole.TerminalConsoleAppender;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.apache.logging.log4j.core.config.Configuration;
|
||||||
|
import org.apache.logging.log4j.core.config.plugins.Plugin;
|
||||||
|
import org.apache.logging.log4j.core.pattern.ConverterKeys;
|
||||||
|
import org.apache.logging.log4j.core.pattern.HighlightConverter;
|
||||||
|
import org.apache.logging.log4j.core.pattern.PatternConverter;
|
||||||
|
import org.apache.logging.log4j.status.StatusLogger;
|
||||||
|
import org.apache.logging.log4j.util.PerformanceSensitive;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A wrapper for {@link HighlightConverter} that auto-disables ANSI when the terminal doesn't support it.
|
||||||
|
* Ansi support is determined by TerminalConsoleAppender
|
||||||
|
*/
|
||||||
|
@Plugin(name = "highlightForge", category = PatternConverter.CATEGORY)
|
||||||
|
@ConverterKeys("highlightForge")
|
||||||
|
@PerformanceSensitive("allocation")
|
||||||
|
public class ForgeHighlight {
|
||||||
|
protected static final Logger LOGGER = StatusLogger.getLogger();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a new instance of the {@link HighlightErrorConverter} with the
|
||||||
|
* specified options.
|
||||||
|
*
|
||||||
|
* @param config The current configuration
|
||||||
|
* @param options The pattern options
|
||||||
|
* @return The new instance
|
||||||
|
*/
|
||||||
|
public static @Nullable HighlightConverter newInstance(Configuration config, String[] options) {
|
||||||
|
try {
|
||||||
|
Method method = TerminalConsoleAppender.class.getDeclaredMethod("initializeTerminal");
|
||||||
|
method.setAccessible(true);
|
||||||
|
method.invoke(null);
|
||||||
|
} catch (ReflectiveOperationException e) {
|
||||||
|
LOGGER.warn("Failed to invoke initializeTerminal on TCA", e);
|
||||||
|
}
|
||||||
|
if (!TerminalConsoleAppender.isAnsiSupported() && Arrays.stream(options).noneMatch(s -> s.equals("disableAnsi=true"))) {
|
||||||
|
List<String> optionList = new ArrayList<>();
|
||||||
|
optionList.add(options[0]);
|
||||||
|
optionList.add("disableAnsi=true");
|
||||||
|
options = optionList.toArray(new String[0]);
|
||||||
|
}
|
||||||
|
return HighlightConverter.newInstance(config, options);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Configuration status="warn" packages="net.minecrell.terminalconsole,net.minecrell.terminalconsole.util,com.mojang.util,cpw.mods.modlauncher.log" shutdownHook="disable">
|
<Configuration status="warn" packages="net.minecrell.terminalconsole,net.minecrell.terminalconsole.util,com.mojang.util,cpw.mods.modlauncher.log,net.minecraftforge.fml.loading.log4j" shutdownHook="disable">
|
||||||
<filters>
|
<filters>
|
||||||
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
|
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
|
||||||
<MarkerFilter marker="NETWORK_PACKETS" onMatch="${sys:forge.logging.marker.networking:-DENY}" onMismatch="NEUTRAL"/>
|
<MarkerFilter marker="NETWORK_PACKETS" onMatch="${sys:forge.logging.marker.networking:-DENY}" onMismatch="NEUTRAL"/>
|
||||||
|
@ -20,10 +20,10 @@
|
||||||
<Appenders>
|
<Appenders>
|
||||||
<TerminalConsole name="Console">
|
<TerminalConsole name="Console">
|
||||||
<PatternLayout>
|
<PatternLayout>
|
||||||
<LoggerNamePatternSelector defaultPattern="%highlight{[%d{HH:mm:ss}] [%t/%level] [%c{2.}/%markerSimpleName]: %minecraftFormatting{%msg}%n%tEx}">
|
<LoggerNamePatternSelector defaultPattern="%highlightForge{[%d{HH:mm:ss}] [%t/%level] [%c{2.}/%markerSimpleName]: %minecraftFormatting{%msg}%n%tEx}">
|
||||||
<!-- don't include the full logger name for Mojang's logs since they use full class names and it's very verbose -->
|
<!-- don't include the full logger name for Mojang's logs since they use full class names and it's very verbose -->
|
||||||
<PatternMatch key="net.minecraft." pattern="%highlight{[%d{HH:mm:ss}] [%t/%level] [minecraft/%logger{1}]: %minecraftFormatting{%msg}%n%tEx}"/>
|
<PatternMatch key="net.minecraft." pattern="%highlightForge{[%d{HH:mm:ss}] [%t/%level] [minecraft/%logger{1}]: %minecraftFormatting{%msg}%n%tEx}"/>
|
||||||
<PatternMatch key="com.mojang." pattern="%highlight{[%d{HH:mm:ss}] [%t/%level] [mojang/%logger{1}]: %minecraftFormatting{%msg}%n%tEx}"/>
|
<PatternMatch key="com.mojang." pattern="%highlightForge{[%d{HH:mm:ss}] [%t/%level] [mojang/%logger{1}]: %minecraftFormatting{%msg}%n%tEx}"/>
|
||||||
</LoggerNamePatternSelector>
|
</LoggerNamePatternSelector>
|
||||||
</PatternLayout>
|
</PatternLayout>
|
||||||
</TerminalConsole>
|
</TerminalConsole>
|
||||||
|
|
Loading…
Reference in a new issue