Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
shartte committed Dec 16, 2024
1 parent 78fc81e commit d3d225a
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 28 deletions.
31 changes: 31 additions & 0 deletions loader/src/main/java/net/neoforged/fml/loading/FMLLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@
import net.neoforged.neoforgespi.language.IModInfo;
import net.neoforged.neoforgespi.locating.IModFile;
import net.neoforged.neoforgespi.locating.IModFileCandidateLocator;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.ConfigurationFactory;
import org.apache.logging.log4j.core.config.ConfigurationSource;
import org.apache.logging.log4j.core.config.Configurator;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.VisibleForTesting;
import org.slf4j.Logger;
Expand All @@ -77,6 +81,7 @@
import java.lang.module.Configuration;
import java.lang.module.ModuleReference;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
Expand Down Expand Up @@ -131,6 +136,12 @@ record DiscoveryResult(List<ModFile> pluginContent,
// This is called by FML Startup
@SuppressWarnings("unused")
public static void startup(Instrumentation instrumentation, StartupArgs startupArgs) {
// In dev, do not overwrite the logging configuration if the user explicitly set another one.
// In production, always overwrite the vanilla configuration.
if (isProduction() || System.getProperty("log4j2.configurationFile") == null) {
overwriteLoggingConfiguration();
}

LOGGER.info("Starting FancyModLoader version {}", JarVersionLookupHandler.getVersion(FMLLoader.class).orElse("UNKNOWN"));

// Make UnionFS work
Expand Down Expand Up @@ -799,4 +810,24 @@ private static List<ITransformer<?>> loadCoreModScripts() {
throw new IllegalStateException(message, e);
}
}

/**
* Forces the log4j2 logging context to use the configuration shipped with fml_loader.
*/
private static void overwriteLoggingConfiguration() {
var loggingConfigUrl = FMLLoader.class.getResource("/log4j2.xml");
if (loggingConfigUrl != null) {
URI loggingConfigUri;
try {
loggingConfigUri = loggingConfigUrl.toURI();
} catch (URISyntaxException e) {
LOGGER.error("Failed to read FML logging configuration: {}", loggingConfigUrl, e);
return;
}
LOGGER.info("Reconfiguring logging with configuration from {}", loggingConfigUri);
var configSource = ConfigurationSource.fromUri(loggingConfigUri);
Configurator.reconfigure(ConfigurationFactory.getInstance().getConfiguration(LoggerContext.getContext(), configSource));
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -51,34 +51,9 @@ public void collectAdditionalModFileLocators(VersionInfo versionInfo, Consumer<I
}

protected String[] preLaunch(String[] arguments, ModuleLayer layer) {
// In dev, do not overwrite the logging configuration if the user explicitly set another one.
// In production, always overwrite the vanilla configuration.
if (isProduction() || System.getProperty("log4j2.configurationFile") == null) {
overwriteLoggingConfiguration(layer);
}

return arguments;
}

/**
* Forces the log4j2 logging context to use the configuration shipped with fml_loader.
*/
private void overwriteLoggingConfiguration(ModuleLayer layer) {
var loggingConfigUrl = getClass().getResource("/log4j2.xml");
if (loggingConfigUrl != null) {
URI loggingConfigUri;
try {
loggingConfigUri = loggingConfigUrl.toURI();
} catch (URISyntaxException e) {
LOGGER.error("Failed to read FML logging configuration: {}", loggingConfigUrl, e);
return;
}
LOGGER.info("Reconfiguring logging with configuration from {}", loggingConfigUri);
var configSource = ConfigurationSource.fromUri(loggingConfigUri);
Configurator.reconfigure(ConfigurationFactory.getInstance().getConfiguration(LoggerContext.getContext(), configSource));
}
}

public static Map<String, List<Path>> getGroupedModFolders() {
Map<String, List<Path>> result;

Expand Down
6 changes: 3 additions & 3 deletions loader/src/main/resources/log4j2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@
<Appenders>
<TerminalConsole name="Console">
<PatternLayout>
<LoggerNamePatternSelector defaultPattern="%highlightForge{[%d{HH:mm:ss}] [%t/%level] [%c{2.}/%markerSimpleName]: %minecraftFormatting{%msg{nolookup}}%n%tEx}">
<LoggerNamePatternSelector defaultPattern="%highlight{[%d{HH:mm:ss}] [%t/%level] [%c{2.}/%markerSimpleName]: %minecraftFormatting{%msg{nolookup}}%n%tEx}">
<!-- 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="%highlightForge{[%d{HH:mm:ss}] [%t/%level] [minecraft/%logger{1}]: %minecraftFormatting{%msg{nolookup}}%n%tEx}"/>
<PatternMatch key="com.mojang." pattern="%highlightForge{[%d{HH:mm:ss}] [%t/%level] [mojang/%logger{1}]: %minecraftFormatting{%msg{nolookup}}%n%tEx}"/>
<PatternMatch key="net.minecraft." pattern="%highlight{[%d{HH:mm:ss}] [%t/%level] [minecraft/%logger{1}]: %minecraftFormatting{%msg{nolookup}}%n%tEx}"/>
<PatternMatch key="com.mojang." pattern="%highlight{[%d{HH:mm:ss}] [%t/%level] [mojang/%logger{1}]: %minecraftFormatting{%msg{nolookup}}%n%tEx}"/>
</LoggerNamePatternSelector>
</PatternLayout>
</TerminalConsole>
Expand Down

0 comments on commit d3d225a

Please sign in to comment.