Skip to content

Commit e98c7df

Browse files
authored
Fix #3400: 逐行过滤日志中的 token (#3856)
1 parent 8ba0e16 commit e98c7df

2 files changed

Lines changed: 26 additions & 8 deletions

File tree

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919

2020
import org.jackhuang.hmcl.util.logging.Logger;
2121
import org.jackhuang.hmcl.util.StringUtils;
22-
import org.jackhuang.hmcl.util.io.FileUtils;
2322
import org.jackhuang.hmcl.util.io.Zipper;
2423
import org.jackhuang.hmcl.util.platform.OperatingSystem;
2524

25+
import java.io.BufferedReader;
2626
import java.io.IOException;
2727
import java.io.UncheckedIOException;
2828
import java.lang.management.ManagementFactory;
@@ -93,9 +93,8 @@ private static void processLogs(Path directory, String fileExtension, String log
9393
if (Files.isRegularFile(file)) {
9494
FileTime time = Files.readAttributes(file, BasicFileAttributes.class).lastModifiedTime();
9595
if (time.toMillis() >= processStartTime) {
96-
try {
97-
String crashLog = Logger.filterForbiddenToken(FileUtils.readText(file, OperatingSystem.NATIVE_CHARSET));
98-
zipper.putTextFile(crashLog, file.getFileName().toString());
96+
try (BufferedReader reader = Files.newBufferedReader(file, OperatingSystem.NATIVE_CHARSET)) {
97+
zipper.putLines(reader.lines().map(Logger::filterForbiddenToken), file.getFileName().toString());
9998
} catch (IOException e) {
10099
LOG.warning("Failed to read log file: " + file, e);
101100
}

HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/Zipper.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,12 @@
1919

2020
import org.jackhuang.hmcl.util.function.ExceptionalPredicate;
2121

22-
import java.io.Closeable;
23-
import java.io.File;
24-
import java.io.IOException;
25-
import java.io.InputStream;
22+
import java.io.*;
2623
import java.nio.charset.Charset;
2724
import java.nio.charset.StandardCharsets;
2825
import java.nio.file.*;
2926
import java.nio.file.attribute.BasicFileAttributes;
27+
import java.util.stream.Stream;
3028
import java.util.zip.ZipEntry;
3129
import java.util.zip.ZipException;
3230
import java.util.zip.ZipOutputStream;
@@ -155,6 +153,27 @@ public void putStream(InputStream in, String path) throws IOException {
155153
zos.closeEntry();
156154
}
157155

156+
public void putLines(Stream<String> lines, String path) throws IOException {
157+
zos.putNextEntry(new ZipEntry(normalize(path)));
158+
159+
try {
160+
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(zos));
161+
lines.forEachOrdered(line -> {
162+
try {
163+
writer.write(line);
164+
writer.write('\n');
165+
} catch (IOException e) {
166+
throw new UncheckedIOException(e);
167+
}
168+
});
169+
writer.flush();
170+
} catch (UncheckedIOException e) {
171+
throw e.getCause();
172+
} finally {
173+
zos.closeEntry();
174+
}
175+
}
176+
158177
public void putTextFile(String text, String path) throws IOException {
159178
putTextFile(text, StandardCharsets.UTF_8, path);
160179
}

0 commit comments

Comments
 (0)