Skip to content

Commit 2d6e01f

Browse files
authored
添加输出游戏调试日志选项 (#4144)
1 parent b6d95c3 commit 2d6e01f

File tree

10 files changed

+124
-5
lines changed

10 files changed

+124
-5
lines changed

HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,7 @@ public LaunchOptions getLaunchOptions(String version, JavaRuntime javaVersion, P
428428
.setNativesDir(vs.getNativesDir())
429429
.setProcessPriority(vs.getProcessPriority())
430430
.setRenderer(vs.getRenderer())
431+
.setEnableDebugLogOutput(vs.isEnableDebugLogOutput())
431432
.setUseNativeGLFW(vs.isUseNativeGLFW())
432433
.setUseNativeOpenAL(vs.isUseNativeOpenAL())
433434
.setDaemon(!makeLaunchScript && vs.getLauncherVisibility().isDaemon())

HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,20 @@ public void setShowLogs(boolean showLogs) {
459459
showLogsProperty.set(showLogs);
460460
}
461461

462+
private final BooleanProperty enableDebugLogOutputProperty = new SimpleBooleanProperty(this, "enableDebugLogOutput", false);
463+
464+
public BooleanProperty enableDebugLogOutputProperty() {
465+
return enableDebugLogOutputProperty;
466+
}
467+
468+
public boolean isEnableDebugLogOutput() {
469+
return enableDebugLogOutputProperty.get();
470+
}
471+
472+
public void setEnableDebugLogOutput(boolean u) {
473+
this.enableDebugLogOutputProperty.set(u);
474+
}
475+
462476
// Minecraft settings.
463477

464478
private final StringProperty serverIpProperty = new SimpleStringProperty(this, "serverIp", "");
@@ -776,6 +790,7 @@ public JsonElement serialize(VersionSetting src, Type typeOfSrc, JsonSerializati
776790
obj.addProperty("notCheckJVM", src.isNotCheckJVM());
777791
obj.addProperty("notPatchNatives", src.isNotPatchNatives());
778792
obj.addProperty("showLogs", src.isShowLogs());
793+
obj.addProperty("enableDebugLogOutput", src.isEnableDebugLogOutput());
779794
obj.addProperty("gameDir", src.getGameDir());
780795
obj.addProperty("launcherVisibility", src.getLauncherVisibility().ordinal());
781796
obj.addProperty("processPriority", src.getProcessPriority().ordinal());
@@ -847,6 +862,7 @@ public VersionSetting deserialize(JsonElement json, Type typeOfT, JsonDeserializ
847862
vs.setNotCheckJVM(Optional.ofNullable(obj.get("notCheckJVM")).map(JsonElement::getAsBoolean).orElse(false));
848863
vs.setNotPatchNatives(Optional.ofNullable(obj.get("notPatchNatives")).map(JsonElement::getAsBoolean).orElse(false));
849864
vs.setShowLogs(Optional.ofNullable(obj.get("showLogs")).map(JsonElement::getAsBoolean).orElse(false));
865+
vs.setEnableDebugLogOutput(Optional.ofNullable(obj.get("enableDebugLogOutput")).map(JsonElement::getAsBoolean).orElse(false));
850866
vs.setLauncherVisibility(parseJsonPrimitive(obj.getAsJsonPrimitive("launcherVisibility"), LauncherVisibility.class, LauncherVisibility.HIDE));
851867
vs.setProcessPriority(parseJsonPrimitive(obj.getAsJsonPrimitive("processPriority"), ProcessPriority.class, ProcessPriority.NORMAL));
852868
vs.setUseNativeGLFW(Optional.ofNullable(obj.get("useNativeGLFW")).map(JsonElement::getAsBoolean).orElse(false));

HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionSettingsPage.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ public void run() {
111111
private final MultiFileItem.FileOption<GameDirectoryType> gameDirCustomOption;
112112
private final JFXComboBox<ProcessPriority> cboProcessPriority;
113113
private final OptionToggleButton showLogsPane;
114+
private final OptionToggleButton enableDebugLogOutputPane;
114115
private final ImagePickerItem iconPickerItem;
115116

116117
private final ChangeListener<Collection<JavaRuntime>> javaListChangeListener;
@@ -410,6 +411,9 @@ public VersionSettingsPage(boolean globalSetting) {
410411
showLogsPane = new OptionToggleButton();
411412
showLogsPane.setTitle(i18n("settings.show_log"));
412413

414+
enableDebugLogOutputPane = new OptionToggleButton();
415+
enableDebugLogOutputPane.setTitle(i18n("settings.enable_debug_log_output"));
416+
413417
BorderPane processPriorityPane = new BorderPane();
414418
{
415419
Label label = new Label(i18n("settings.advanced.process_priority"));
@@ -474,6 +478,7 @@ public VersionSettingsPage(boolean globalSetting) {
474478
launcherVisibilityPane,
475479
dimensionPane,
476480
showLogsPane,
481+
enableDebugLogOutputPane,
477482
processPriorityPane,
478483
serverPane,
479484
showAdvancedSettingPane
@@ -551,6 +556,7 @@ public void loadVersion(Profile profile, String versionId) {
551556
chkAutoAllocate.selectedProperty().unbindBidirectional(lastVersionSetting.autoMemoryProperty());
552557
chkFullscreen.selectedProperty().unbindBidirectional(lastVersionSetting.fullscreenProperty());
553558
showLogsPane.selectedProperty().unbindBidirectional(lastVersionSetting.showLogsProperty());
559+
enableDebugLogOutputPane.selectedProperty().unbindBidirectional(lastVersionSetting.enableDebugLogOutputProperty());
554560
FXUtils.unbindEnum(cboLauncherVisibility, lastVersionSetting.launcherVisibilityProperty());
555561
FXUtils.unbindEnum(cboProcessPriority, lastVersionSetting.processPriorityProperty());
556562

@@ -585,6 +591,7 @@ public void loadVersion(Profile profile, String versionId) {
585591
chkAutoAllocate.selectedProperty().bindBidirectional(versionSetting.autoMemoryProperty());
586592
chkFullscreen.selectedProperty().bindBidirectional(versionSetting.fullscreenProperty());
587593
showLogsPane.selectedProperty().bindBidirectional(versionSetting.showLogsProperty());
594+
enableDebugLogOutputPane.selectedProperty().bindBidirectional(versionSetting.enableDebugLogOutputProperty());
588595
FXUtils.bindEnum(cboLauncherVisibility, versionSetting.launcherVisibilityProperty());
589596
FXUtils.bindEnum(cboProcessPriority, versionSetting.processPriorityProperty());
590597

HMCL/src/main/resources/assets/lang/I18N.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1412,6 +1412,7 @@ settings.memory.unit.mib=MiB
14121412
settings.memory.used_per_total=%1$.1f GiB Used / %2$.1f GiB Total
14131413
settings.physical_memory=Physical Memory Size
14141414
settings.show_log=Show Logs
1415+
settings.enable_debug_log_output=Output debug log
14151416
settings.tabs.installers=Loaders
14161417
settings.take_effect_after_restart=Applies After Restart
14171418
settings.type=Settings Type of Instance

HMCL/src/main/resources/assets/lang/I18N_zh.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,6 +1200,7 @@ settings.memory.unit.mib=MiB
12001200
settings.memory.used_per_total=已使用 %1$.1f GiB / 總記憶體 %2$.1f GiB
12011201
settings.physical_memory=實體記憶體大小
12021202
settings.show_log=查看日誌
1203+
settings.enable_debug_log_output=輸出除錯日誌
12031204
settings.tabs.installers=自動安裝
12041205
settings.take_effect_after_restart=重啟後生效
12051206
settings.type=實例遊戲設定類型

HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,6 +1210,7 @@ settings.memory.unit.mib=MiB
12101210
settings.memory.used_per_total=设备中已使用 %1$.1f GiB / 设备总内存 %2$.1f GiB
12111211
settings.physical_memory=物理内存大小
12121212
settings.show_log=查看日志
1213+
settings.enable_debug_log_output=输出调试日志
12131214
settings.tabs.installers=自动安装
12141215
settings.take_effect_after_restart=重启后生效
12151216
settings.type=实例游戏设置类型

HMCLCore/src/main/java/org/jackhuang/hmcl/game/LaunchOptions.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public class LaunchOptions implements Serializable {
6464
private Renderer renderer = Renderer.DEFAULT;
6565
private boolean useNativeGLFW;
6666
private boolean useNativeOpenAL;
67+
private boolean enableDebugLogOutput;
6768
private boolean daemon;
6869

6970
/**
@@ -282,6 +283,10 @@ public boolean isUseNativeOpenAL() {
282283
return useNativeOpenAL;
283284
}
284285

286+
public boolean isEnableDebugLogOutput() {
287+
return enableDebugLogOutput;
288+
}
289+
285290
/**
286291
* Will launcher keeps alive after game launched or not.
287292
*/
@@ -497,5 +502,9 @@ public Builder setDaemon(boolean daemon) {
497502
return this;
498503
}
499504

505+
public Builder setEnableDebugLogOutput(boolean u) {
506+
options.enableDebugLogOutput = u;
507+
return this;
508+
}
500509
}
501510
}

HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ private Command generateCommandLine(Path nativeFolder) throws IOException {
149149
res.addDefault("-Dcom.sun.jndi.cosnaming.object.trustURLCodebase=", "false");
150150

151151
String formatMsgNoLookups = res.addDefault("-Dlog4j2.formatMsgNoLookups=", "true");
152-
if (!"-Dlog4j2.formatMsgNoLookups=false".equals(formatMsgNoLookups) && isUsingLog4j()) {
152+
if (isUsingLog4j() && (options.isEnableDebugLogOutput() || !"-Dlog4j2.formatMsgNoLookups=false".equals(formatMsgNoLookups))) {
153153
res.addDefault("-Dlog4j.configurationFile=", FileUtils.getAbsolutePath(getLog4jConfigurationFile()));
154154
}
155155

@@ -421,14 +421,24 @@ public Path getLog4jConfigurationFile() {
421421

422422
public void extractLog4jConfigurationFile() throws IOException {
423423
Path targetFile = getLog4jConfigurationFile();
424-
InputStream source;
424+
425+
String sourcePath;
426+
425427
if (GameVersionNumber.asGameVersion(repository.getGameVersion(version)).compareTo("1.12") < 0) {
426-
source = DefaultLauncher.class.getResourceAsStream("/assets/game/log4j2-1.7.xml");
428+
if (options.isEnableDebugLogOutput()) {
429+
sourcePath = "/assets/game/log4j2-1.7-debug.xml";
430+
} else {
431+
sourcePath = "/assets/game/log4j2-1.7.xml";
432+
}
427433
} else {
428-
source = DefaultLauncher.class.getResourceAsStream("/assets/game/log4j2-1.12.xml");
434+
if (options.isEnableDebugLogOutput()) {
435+
sourcePath = "/assets/game/log4j2-1.12-debug.xml";
436+
} else {
437+
sourcePath = "/assets/game/log4j2-1.12.xml";
438+
}
429439
}
430440

431-
try (InputStream input = source) {
441+
try (InputStream input = DefaultLauncher.class.getResourceAsStream(sourcePath)) {
432442
Files.copy(input, targetFile, StandardCopyOption.REPLACE_EXISTING);
433443
}
434444
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Configuration status="warn" packages="">
3+
<Appenders>
4+
<Console name="SysOut" target="SYSTEM_OUT">
5+
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg{nolookups}%n" />
6+
</Console>
7+
<Queue name="ServerGuiConsole">
8+
<PatternLayout pattern="[%d{HH:mm:ss} %level]: %msg{nolookups}%n" />
9+
</Queue>
10+
<RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
11+
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level] [%logger]: %msg{nolookups}%n"/>
12+
<Policies>
13+
<TimeBasedTriggeringPolicy/>
14+
<OnStartupTriggeringPolicy/>
15+
</Policies>
16+
</RollingRandomAccessFile>
17+
<RollingRandomAccessFile name="DebugFile" fileName="logs/debug.log" filePattern="logs/debug-%d{yyyy-MM-dd}-%i.log.gz">
18+
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%t/%level] [%logger]: %msg{nolookups}%n"/>
19+
<Policies>
20+
<TimeBasedTriggeringPolicy/>
21+
<OnStartupTriggeringPolicy/>
22+
</Policies>
23+
<DefaultRolloverStrategy max="999" fileIndex="min"/>
24+
</RollingRandomAccessFile>
25+
</Appenders>
26+
<Loggers>
27+
<Root level="all">
28+
<filters>
29+
<MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL"/>
30+
</filters>
31+
<AppenderRef ref="SysOut" level="info"/>
32+
<AppenderRef ref="ServerGuiConsole" level="info"/>
33+
<AppenderRef ref="File" level="info"/>
34+
<AppenderRef ref="DebugFile" level="all"/>
35+
</Root>
36+
</Loggers>
37+
</Configuration>
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Configuration status="WARN">
3+
<Appenders>
4+
<Console name="SysOut" target="SYSTEM_OUT">
5+
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n" />
6+
</Console>
7+
<Queue name="ServerGuiConsole">
8+
<PatternLayout pattern="[%d{HH:mm:ss} %level]: %msg%n" />
9+
</Queue>
10+
<RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
11+
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level] [%logger]: %msg%n"/>
12+
<Policies>
13+
<TimeBasedTriggeringPolicy/>
14+
<OnStartupTriggeringPolicy/>
15+
</Policies>
16+
</RollingRandomAccessFile>
17+
<RollingRandomAccessFile name="DebugFile" fileName="logs/debug.log" filePattern="logs/debug-%d{yyyy-MM-dd}-%i.log.gz">
18+
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%t/%level] [%logger]: %msg%n"/>
19+
<Policies>
20+
<TimeBasedTriggeringPolicy/>
21+
<OnStartupTriggeringPolicy/>
22+
</Policies>
23+
</RollingRandomAccessFile>
24+
</Appenders>
25+
<Loggers>
26+
<Root level="all">
27+
<filters>
28+
<MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL"/>
29+
</filters>
30+
<AppenderRef ref="SysOut" level="info"/>
31+
<AppenderRef ref="ServerGuiConsole" level="info"/>
32+
<AppenderRef ref="File" level="info"/>
33+
<AppenderRef ref="DebugFile" level="all"/>
34+
</Root>
35+
</Loggers>
36+
</Configuration>

0 commit comments

Comments
 (0)