@@ -19,9 +19,7 @@ package org.jackhuang.hmcl.util;
|
|||||||
|
|
||||||
import org.jackhuang.hmcl.util.io.IOUtils;
|
import org.jackhuang.hmcl.util.io.IOUtils;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.*;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
@@ -60,10 +58,11 @@ public final class Logging {
|
|||||||
LOG.setLevel(Level.ALL);
|
LOG.setLevel(Level.ALL);
|
||||||
LOG.setUseParentHandlers(false);
|
LOG.setUseParentHandlers(false);
|
||||||
LOG.setFilter(record -> {
|
LOG.setFilter(record -> {
|
||||||
record.setMessage(filterForbiddenToken(record.getMessage()));
|
record.setMessage(format(record));
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
DefaultFormatter formatter = new DefaultFormatter();
|
||||||
try {
|
try {
|
||||||
if (Files.isRegularFile(logFolder))
|
if (Files.isRegularFile(logFolder))
|
||||||
Files.delete(logFolder);
|
Files.delete(logFolder);
|
||||||
@@ -71,7 +70,7 @@ public final class Logging {
|
|||||||
Files.createDirectories(logFolder);
|
Files.createDirectories(logFolder);
|
||||||
FileHandler fileHandler = new FileHandler(logFolder.resolve("hmcl.log").toAbsolutePath().toString());
|
FileHandler fileHandler = new FileHandler(logFolder.resolve("hmcl.log").toAbsolutePath().toString());
|
||||||
fileHandler.setLevel(Level.FINEST);
|
fileHandler.setLevel(Level.FINEST);
|
||||||
fileHandler.setFormatter(DefaultFormatter.INSTANCE);
|
fileHandler.setFormatter(formatter);
|
||||||
fileHandler.setEncoding("UTF-8");
|
fileHandler.setEncoding("UTF-8");
|
||||||
LOG.addHandler(fileHandler);
|
LOG.addHandler(fileHandler);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -79,11 +78,11 @@ public final class Logging {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ConsoleHandler consoleHandler = new ConsoleHandler();
|
ConsoleHandler consoleHandler = new ConsoleHandler();
|
||||||
consoleHandler.setFormatter(DefaultFormatter.INSTANCE);
|
consoleHandler.setFormatter(formatter);
|
||||||
consoleHandler.setLevel(Level.FINER);
|
consoleHandler.setLevel(Level.FINER);
|
||||||
LOG.addHandler(consoleHandler);
|
LOG.addHandler(consoleHandler);
|
||||||
|
|
||||||
StreamHandler streamHandler = new StreamHandler(storedLogs, DefaultFormatter.INSTANCE) {
|
StreamHandler streamHandler = new StreamHandler(storedLogs, formatter) {
|
||||||
@Override
|
@Override
|
||||||
public synchronized void publish(LogRecord record) {
|
public synchronized void publish(LogRecord record) {
|
||||||
super.publish(record);
|
super.publish(record);
|
||||||
@@ -104,7 +103,7 @@ public final class Logging {
|
|||||||
LOG.setUseParentHandlers(false);
|
LOG.setUseParentHandlers(false);
|
||||||
|
|
||||||
ConsoleHandler consoleHandler = new ConsoleHandler();
|
ConsoleHandler consoleHandler = new ConsoleHandler();
|
||||||
consoleHandler.setFormatter(DefaultFormatter.INSTANCE);
|
consoleHandler.setFormatter(new DefaultFormatter());
|
||||||
consoleHandler.setLevel(Level.FINER);
|
consoleHandler.setLevel(Level.FINER);
|
||||||
LOG.addHandler(consoleHandler);
|
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 String format(LogRecord record) {
|
||||||
private static final MessageFormat format = new MessageFormat("[{0,date,HH:mm:ss}] [{1}.{2}/{3}] {4}\n");
|
String message = filterForbiddenToken(record.getMessage());
|
||||||
|
|
||||||
@Override
|
Throwable thrown = record.getThrown();
|
||||||
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());
|
|
||||||
|
|
||||||
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user