1717 */
1818package org .jackhuang .hmcl .game ;
1919
20- import org .jackhuang .hmcl .util .io .IOUtils ;
21- import org .jackhuang .hmcl .util .logging .Logger ;
2220import org .jackhuang .hmcl .util .StringUtils ;
21+ import org .jackhuang .hmcl .util .io .IOUtils ;
2322import org .jackhuang .hmcl .util .io .Zipper ;
23+ import org .jackhuang .hmcl .util .logging .Logger ;
2424import org .jackhuang .hmcl .util .platform .OperatingSystem ;
2525
2626import java .io .BufferedReader ;
2727import java .io .IOException ;
2828import java .io .UncheckedIOException ;
29- import java .lang .management .ManagementFactory ;
3029import java .nio .file .DirectoryStream ;
3130import java .nio .file .Files ;
3231import java .nio .file .Path ;
33- import java .nio .file .attribute .BasicFileAttributes ;
34- import java .nio .file .attribute .FileTime ;
32+ import java .nio .file .PathMatcher ;
3533import java .util .ArrayList ;
3634import java .util .HashSet ;
3735import java .util .List ;
@@ -43,7 +41,9 @@ public final class LogExporter {
4341 private LogExporter () {
4442 }
4543
46- public static CompletableFuture <Void > exportLogs (Path zipFile , DefaultGameRepository gameRepository , String versionId , String logs , String launchScript ) {
44+ public static CompletableFuture <Void > exportLogs (
45+ Path zipFile , DefaultGameRepository gameRepository , String versionId , String logs , String launchScript ,
46+ PathMatcher logMatcher ) {
4747 Path runDirectory = gameRepository .getRunDirectory (versionId );
4848 Path baseDirectory = gameRepository .getBaseDirectory ();
4949 List <String > versions = new ArrayList <>();
@@ -65,10 +65,10 @@ public static CompletableFuture<Void> exportLogs(Path zipFile, DefaultGameReposi
6565
6666 return CompletableFuture .runAsync (() -> {
6767 try (Zipper zipper = new Zipper (zipFile )) {
68- processLogs (runDirectory .resolve ("liteconfig" ), "*.log" , "liteconfig" , zipper );
69- processLogs (runDirectory .resolve ("logs" ), "*.log" , "logs" , zipper );
70- processLogs (runDirectory , "*.log" , "runDirectory" , zipper );
71- processLogs (runDirectory .resolve ("crash-reports" ), "*.txt" , "crash-reports" , zipper );
68+ processLogs (runDirectory .resolve ("liteconfig" ), "*.log" , "liteconfig" , zipper , logMatcher );
69+ processLogs (runDirectory .resolve ("logs" ), "*.log" , "logs" , zipper , logMatcher );
70+ processLogs (runDirectory , "*.log" , "runDirectory" , zipper , logMatcher );
71+ processLogs (runDirectory .resolve ("crash-reports" ), "*.txt" , "crash-reports" , zipper , logMatcher );
7272
7373 zipper .putTextFile (LOG .getLogs (), "hmcl.log" );
7474 zipper .putTextFile (logs , "minecraft.log" );
@@ -86,14 +86,11 @@ public static CompletableFuture<Void> exportLogs(Path zipFile, DefaultGameReposi
8686 });
8787 }
8888
89- private static void processLogs (Path directory , String fileExtension , String logDirectory , Zipper zipper ) {
89+ private static void processLogs (Path directory , String fileExtension , String logDirectory , Zipper zipper , PathMatcher logMatcher ) {
9090 try (DirectoryStream <Path > stream = Files .newDirectoryStream (directory , fileExtension )) {
91- long processStartTime = ManagementFactory .getRuntimeMXBean ().getStartTime ();
92-
9391 for (Path file : stream ) {
9492 if (Files .isRegularFile (file )) {
95- FileTime time = Files .readAttributes (file , BasicFileAttributes .class ).lastModifiedTime ();
96- if (time .toMillis () >= processStartTime ) {
93+ if (logMatcher == null || logMatcher .matches (file )) {
9794 try (BufferedReader reader = IOUtils .newBufferedReaderMaybeNativeEncoding (file )) {
9895 zipper .putLines (reader .lines ().map (Logger ::filterForbiddenToken ), file .getFileName ().toString ());
9996 } catch (IOException e ) {
0 commit comments