Merge 87728ec3677f795e82d2c299efa083644d00d663 into 9969dc60c5278340b6b9a4d7facdde620e99d1f5

This commit is contained in:
辞庐 2025-08-02 23:00:10 +08:00 committed by GitHub
commit 3db9ce9dcc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 85 additions and 4 deletions

View File

@ -409,6 +409,7 @@ public class HMCLGameRepository extends DefaultGameRepository {
.setNativesDir(vs.getNativesDir())
.setProcessPriority(vs.getProcessPriority())
.setRenderer(vs.getRenderer())
.setUseDebugLog4j2Config(vs.isUseDebugLog4j2Config())
.setUseNativeGLFW(vs.isUseNativeGLFW())
.setUseNativeOpenAL(vs.isUseNativeOpenAL())
.setDaemon(!makeLaunchScript && vs.getLauncherVisibility().isDaemon())

View File

@ -589,6 +589,20 @@ public final class VersionSetting implements Cloneable, Observable {
this.rendererProperty.set(renderer);
}
private final BooleanProperty useDebugLog4j2ConfigProperty = new SimpleBooleanProperty(this, "useDebugLog4j2Config", false);
public boolean isUseDebugLog4j2Config() {
return useDebugLog4j2ConfigProperty.get();
}
public BooleanProperty useDebugLog4j2ConfigProperty() {
return useDebugLog4j2ConfigProperty;
}
public void setUseDebugLog4j2Config(boolean u) {
this.useDebugLog4j2ConfigProperty.set(u);
}
private final BooleanProperty useNativeGLFW = new SimpleBooleanProperty(this, "nativeGLFW", false);
public boolean isUseNativeGLFW() {
@ -764,6 +778,7 @@ public final class VersionSetting implements Cloneable, Observable {
obj.addProperty("gameDir", src.getGameDir());
obj.addProperty("launcherVisibility", src.getLauncherVisibility().ordinal());
obj.addProperty("processPriority", src.getProcessPriority().ordinal());
obj.addProperty("useDebugLog4j2Config", src.isUseDebugLog4j2Config());
obj.addProperty("useNativeGLFW", src.isUseNativeGLFW());
obj.addProperty("useNativeOpenAL", src.isUseNativeOpenAL());
obj.addProperty("gameDirType", src.getGameDirType().ordinal());
@ -841,6 +856,7 @@ public final class VersionSetting implements Cloneable, Observable {
vs.setShowLogs(Optional.ofNullable(obj.get("showLogs")).map(JsonElement::getAsBoolean).orElse(false));
vs.setLauncherVisibility(getOrDefault(LauncherVisibility.values(), obj.get("launcherVisibility"), LauncherVisibility.HIDE));
vs.setProcessPriority(getOrDefault(ProcessPriority.values(), obj.get("processPriority"), ProcessPriority.NORMAL));
vs.setUseDebugLog4j2Config(Optional.ofNullable(obj.get("useDebugLog4j2Config")).map(JsonElement::getAsBoolean).orElse(false));
vs.setUseNativeGLFW(Optional.ofNullable(obj.get("useNativeGLFW")).map(JsonElement::getAsBoolean).orElse(false));
vs.setUseNativeOpenAL(Optional.ofNullable(obj.get("useNativeOpenAL")).map(JsonElement::getAsBoolean).orElse(false));
vs.setGameDirType(getOrDefault(GameDirectoryType.values(), obj.get("gameDirType"), GameDirectoryType.ROOT_FOLDER));

View File

@ -46,6 +46,7 @@ public final class AdvancedVersionSettingPage extends StackPane implements Decor
private final OptionToggleButton noJVMCheckPane;
private final OptionToggleButton noNativesPatchPane;
private final OptionToggleButton useNativeGLFWPane;
private final OptionToggleButton useDebugLog4j2CongigPane;
private final OptionToggleButton useNativeOpenALPane;
private final ComponentSublist nativesDirSublist;
private final MultiFileItem<NativesDirectoryType> nativesDirItem;
@ -191,6 +192,9 @@ public final class AdvancedVersionSettingPage extends StackPane implements Decor
noNativesPatchPane = new OptionToggleButton();
noNativesPatchPane.setTitle(i18n("settings.advanced.dont_patch_natives"));
useDebugLog4j2CongigPane = new OptionToggleButton();
useDebugLog4j2CongigPane.setTitle(i18n("settings.advanced.use_debug_log42j_config"));
useNativeGLFWPane = new OptionToggleButton();
useNativeGLFWPane.setTitle(i18n("settings.advanced.use_native_glfw"));
@ -199,7 +203,7 @@ public final class AdvancedVersionSettingPage extends StackPane implements Decor
workaroundPane.getContent().setAll(
nativesDirSublist, rendererPane, noJVMArgsPane, noGameCheckPane,
noJVMCheckPane, noNativesPatchPane
noJVMCheckPane, noNativesPatchPane, useDebugLog4j2CongigPane
);
if (OperatingSystem.CURRENT_OS.isLinuxOrBSD()) {
@ -236,6 +240,7 @@ public final class AdvancedVersionSettingPage extends StackPane implements Decor
noJVMArgsPane.selectedProperty().bindBidirectional(versionSetting.noJVMArgsProperty());
noNativesPatchPane.selectedProperty().bindBidirectional(versionSetting.notPatchNativesProperty());
useNativeGLFWPane.selectedProperty().bindBidirectional(versionSetting.useNativeGLFWProperty());
useDebugLog4j2CongigPane.selectedProperty().bindBidirectional(versionSetting.useDebugLog4j2ConfigProperty());
useNativeOpenALPane.selectedProperty().bindBidirectional(versionSetting.useNativeOpenALProperty());
nativesDirItem.selectedDataProperty().bindBidirectional(versionSetting.nativesDirTypeProperty());
@ -257,6 +262,7 @@ public final class AdvancedVersionSettingPage extends StackPane implements Decor
noJVMCheckPane.selectedProperty().unbindBidirectional(versionSetting.notCheckJVMProperty());
noJVMArgsPane.selectedProperty().unbindBidirectional(versionSetting.noJVMArgsProperty());
noNativesPatchPane.selectedProperty().unbindBidirectional(versionSetting.notPatchNativesProperty());
useDebugLog4j2CongigPane.selectedProperty().unbindBidirectional(versionSetting.useDebugLog4j2ConfigProperty());
useNativeGLFWPane.selectedProperty().unbindBidirectional(versionSetting.useNativeGLFWProperty());
useNativeOpenALPane.selectedProperty().unbindBidirectional(versionSetting.useNativeOpenALProperty());

View File

@ -1287,6 +1287,7 @@ settings.advanced.workaround=Workaround
settings.advanced.workaround.warning=Workaround options are intended only for advanced users. Tweaking with these options may crash the game. Unless you know what you are doing, please do not edit these options.
settings.advanced.wrapper_launcher=Wrapper Command
settings.advanced.wrapper_launcher.prompt=Allows launching using an extra wrapper program like "optirun" on Linux
settings.advanced.use_debug_log42j_config=Use debug level Log4j2 configuration file
settings.custom=Custom

View File

@ -1086,6 +1086,7 @@ settings.advanced.workaround=除錯選項
settings.advanced.workaround.warning=除錯選項僅提供給專業玩家使用。修改除錯選項可能會導致遊戲無法啟動。除非你知道你在做什麼,否則請不要修改這些選項。
settings.advanced.wrapper_launcher=前置指令
settings.advanced.wrapper_launcher.prompt=如填寫「optirun」後啟動指令將從「java ...」變為「optirun java ...」
settings.advanced.use_debug_log42j_config=使用除錯級別 Log4j2 設定檔
settings.custom=自訂

View File

@ -1096,6 +1096,7 @@ settings.advanced.workaround=调试选项
settings.advanced.workaround.warning=调试选项仅提供给专业玩家使用。调试选项可能会导致游戏无法启动。除非你知道你在做什么,否则请不要修改这些选项!
settings.advanced.wrapper_launcher=包装命令
settings.advanced.wrapper_launcher.prompt=如填写“optirun”后启动命令将从“java ...”变为“optirun java ...”
settings.advanced.use_debug_log42j_config=使用调试级别 Log4j2 配置文件
settings.custom=自定义

View File

@ -63,6 +63,7 @@ public class LaunchOptions implements Serializable {
private Renderer renderer = Renderer.DEFAULT;
private boolean useNativeGLFW;
private boolean useNativeOpenAL;
private boolean useDebugLog4j2Config;
private boolean daemon;
/**
@ -274,6 +275,10 @@ public class LaunchOptions implements Serializable {
return useNativeOpenAL;
}
public boolean isUseDebugLog4j2Config() {
return useDebugLog4j2Config;
}
/**
* Will launcher keeps alive after game launched or not.
*/
@ -484,5 +489,9 @@ public class LaunchOptions implements Serializable {
return this;
}
public Builder setUseDebugLog4j2Config(boolean u) {
options.useDebugLog4j2Config = u;
return this;
}
}
}

View File

@ -148,11 +148,17 @@ public class DefaultLauncher extends Launcher {
res.addDefault("-Dcom.sun.jndi.rmi.object.trustURLCodebase=", "false");
res.addDefault("-Dcom.sun.jndi.cosnaming.object.trustURLCodebase=", "false");
String formatMsgNoLookups = res.addDefault("-Dlog4j2.formatMsgNoLookups=", "true");
if (!"-Dlog4j2.formatMsgNoLookups=false".equals(formatMsgNoLookups) && isUsingLog4j()) {
if (options.isUseDebugLog4j2Config()) {
res.addDefault("-Dlog4j2.formatMsgNoLookups=", "false");
res.addDefault("-Dlog4j.configurationFile=", getLog4jConfigurationFile().getAbsolutePath());
} else {
String formatMsgNoLookups = res.addDefault("-Dlog4j2.formatMsgNoLookups=", "true");
if (!"-Dlog4j2.formatMsgNoLookups=false".equals(formatMsgNoLookups) && isUsingLog4j()) {
res.addDefault("-Dlog4j.configurationFile=", getLog4jConfigurationFile().getAbsolutePath());
}
}
// Default JVM Args
if (!options.isNoGeneratedJVMArgs()) {
appendJvmArgs(res);
@ -412,7 +418,9 @@ public class DefaultLauncher extends Launcher {
public void extractLog4jConfigurationFile() throws IOException {
File targetFile = getLog4jConfigurationFile();
InputStream source;
if (GameVersionNumber.asGameVersion(repository.getGameVersion(version)).compareTo("1.12") < 0) {
if (options.isUseDebugLog4j2Config()) {
source = DefaultLauncher.class.getResourceAsStream("/assets/game/log4j2-debug.xml");
} else if (GameVersionNumber.asGameVersion(repository.getGameVersion(version)).compareTo("1.12") < 0) {
source = DefaultLauncher.class.getResourceAsStream("/assets/game/log4j2-1.7.xml");
} else {
source = DefaultLauncher.class.getResourceAsStream("/assets/game/log4j2-1.12.xml");

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" packages="">
<Appenders>
<Console name="SysOut" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg{nolookups}%n" />
</Console>
<Queue name="ServerGuiConsole">
<PatternLayout pattern="[%d{HH:mm:ss} %level]: %msg{nolookups}%n" />
</Queue>
<RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level] [%logger]: %msg{nolookups}%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<OnStartupTriggeringPolicy/>
</Policies>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="DebugFile" fileName="logs/debug.log" filePattern="logs/debug-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%t/%level] [%logger]: %msg{nolookups}%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<OnStartupTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="200MB"/>
</Policies>
<DefaultRolloverStrategy max="999" fileIndex="min"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="all">
<filters>
<MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL"/>
</filters>
<AppenderRef ref="SysOut" level="info"/>
<AppenderRef ref="ServerGuiConsole" level="info"/>
<AppenderRef ref="File" level="info"/>
<AppenderRef ref="DebugFile" level="all"/>
</Root>
</Loggers>
</Configuration>