diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LogExporter.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LogExporter.java index 2daa48c53..a8c4313ae 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LogExporter.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LogExporter.java @@ -65,37 +65,15 @@ public final class LogExporter { return CompletableFuture.runAsync(() -> { try (Zipper zipper = new Zipper(zipFile)) { - Path logsDir = runDirectory.resolve("logs"); - if (Files.exists(logsDir.resolve("debug.log"))) { - zipper.putFile(logsDir.resolve("debug.log"), "debug.log"); - } - if (Files.exists(logsDir.resolve("latest.log"))) { - zipper.putFile(logsDir.resolve("latest.log"), "latest.log"); - } - if (Files.exists(logsDir.resolve("fml-client-latest.log"))) { - zipper.putFile(logsDir.resolve("fml-client-latest.log"), "fml-client-latest.log"); - } + processLogs(runDirectory.resolve("liteconfig"), "*.log", "liteconfig", zipper); + processLogs(runDirectory.resolve("logs"), "*.log", "logs", zipper); + processLogs(runDirectory, "*.log", "runDirectory", zipper); + processLogs(runDirectory.resolve("crash-reports"), "*.txt", "crash-reports", zipper); zipper.putTextFile(Logging.getLogs(), "hmcl.log"); zipper.putTextFile(logs, "minecraft.log"); zipper.putTextFile(Logging.filterForbiddenToken(launchScript), OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS ? "launch.bat" : "launch.sh"); - try (DirectoryStream stream = Files.newDirectoryStream(runDirectory, "hs_err_*.log")) { - long processStartTime = ManagementFactory.getRuntimeMXBean().getStartTime(); - - for (Path file : stream) { - if (Files.isRegularFile(file)) { - FileTime time = Files.readAttributes(file, BasicFileAttributes.class).creationTime(); - if (time.toMillis() >= processStartTime) { - String crashLog = Logging.filterForbiddenToken(FileUtils.readText(file)); - zipper.putTextFile(crashLog, file.getFileName().toString()); - } - } - } - } catch (Throwable e) { - LOG.log(Level.WARNING, "Failed to find vm crash log", e); - } - for (String id : versions) { Path versionJson = baseDirectory.resolve("versions").resolve(id).resolve(id + ".json"); if (Files.exists(versionJson)) { @@ -107,4 +85,22 @@ public final class LogExporter { } }); } + + private static void processLogs(Path directory, String fileExtension, String logDirectory, Zipper zipper) { + try (DirectoryStream stream = Files.newDirectoryStream(directory, fileExtension)) { + long processStartTime = ManagementFactory.getRuntimeMXBean().getStartTime(); + + for (Path file : stream) { + if (Files.isRegularFile(file)) { + FileTime time = Files.readAttributes(file, BasicFileAttributes.class).creationTime(); + if (time.toMillis() >= processStartTime) { + String crashLog = Logging.filterForbiddenToken(FileUtils.readText(file)); + zipper.putTextFile(crashLog, file.getFileName().toString()); + } + } + } + } catch (Throwable e) { + LOG.log(Level.WARNING, "Failed to find any log on " + logDirectory, e); + } + } }