优化日志性能 (#2488)

* 优化日志性能

* update

* update

* update
This commit is contained in:
Glavo
2023-08-26 11:13:15 +08:00
committed by GitHub
parent 74118049ce
commit 413d962db0

View File

@@ -19,9 +19,7 @@ package org.jackhuang.hmcl.util;
import org.jackhuang.hmcl.util.io.IOUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.text.MessageFormat;
@@ -60,10 +58,11 @@ public final class Logging {
LOG.setLevel(Level.ALL);
LOG.setUseParentHandlers(false);
LOG.setFilter(record -> {
record.setMessage(filterForbiddenToken(record.getMessage()));
record.setMessage(format(record));
return true;
});
DefaultFormatter formatter = new DefaultFormatter();
try {
if (Files.isRegularFile(logFolder))
Files.delete(logFolder);
@@ -71,7 +70,7 @@ public final class Logging {
Files.createDirectories(logFolder);
FileHandler fileHandler = new FileHandler(logFolder.resolve("hmcl.log").toAbsolutePath().toString());
fileHandler.setLevel(Level.FINEST);
fileHandler.setFormatter(DefaultFormatter.INSTANCE);
fileHandler.setFormatter(formatter);
fileHandler.setEncoding("UTF-8");
LOG.addHandler(fileHandler);
} catch (IOException e) {
@@ -79,11 +78,11 @@ public final class Logging {
}
ConsoleHandler consoleHandler = new ConsoleHandler();
consoleHandler.setFormatter(DefaultFormatter.INSTANCE);
consoleHandler.setFormatter(formatter);
consoleHandler.setLevel(Level.FINER);
LOG.addHandler(consoleHandler);
StreamHandler streamHandler = new StreamHandler(storedLogs, DefaultFormatter.INSTANCE) {
StreamHandler streamHandler = new StreamHandler(storedLogs, formatter) {
@Override
public synchronized void publish(LogRecord record) {
super.publish(record);
@@ -104,7 +103,7 @@ public final class Logging {
LOG.setUseParentHandlers(false);
ConsoleHandler consoleHandler = new ConsoleHandler();
consoleHandler.setFormatter(DefaultFormatter.INSTANCE);
consoleHandler.setFormatter(new DefaultFormatter());
consoleHandler.setLevel(Level.FINER);
LOG.addHandler(consoleHandler);
}
@@ -121,23 +120,41 @@ public final class Logging {
}
}
private static final class DefaultFormatter extends Formatter {
private static final MessageFormat FORMAT = new MessageFormat("[{0,date,HH:mm:ss}] [{1}.{2}/{3}] {4}\n");
static final DefaultFormatter INSTANCE = new DefaultFormatter();
private static final MessageFormat format = new MessageFormat("[{0,date,HH:mm:ss}] [{1}.{2}/{3}] {4}\n");
private static String format(LogRecord record) {
String message = filterForbiddenToken(record.getMessage());
@Override
public String format(LogRecord record) {
String log = format.format(new Object[]{
new Date(record.getMillis()),
record.getSourceClassName(), record.getSourceMethodName(), record.getLevel().getName(),
record.getMessage()
}, new StringBuffer(128), null).toString();
if (record.getThrown() != null)
log += StringUtils.getStackTrace(record.getThrown());
Throwable thrown = record.getThrown();
return log;
StringWriter writer;
StringBuffer buffer;
if (thrown == null) {
writer = null;
buffer = new StringBuffer(256);
} else {
writer = new StringWriter(1024);
buffer = writer.getBuffer();
}
FORMAT.format(new Object[]{
new Date(record.getMillis()),
record.getSourceClassName(), record.getSourceMethodName(), record.getLevel().getName(),
message
}, buffer, null);
if (thrown != null) {
try (PrintWriter printWriter = new PrintWriter(writer)) {
thrown.printStackTrace(printWriter);
}
}
return buffer.toString();
}
private static final class DefaultFormatter extends Formatter {
@Override
public String format(LogRecord record) {
return record.getMessage();
}
}
}