[FEATURE] Реализация вывода логов в HTML

This commit is contained in:
Gravit 2019-04-13 07:40:05 +07:00
parent 31b9d43a7f
commit 9bdde2a727
No known key found for this signature in database
GPG key ID: 061981E1E85D3216
3 changed files with 50 additions and 4 deletions

View file

@ -1,5 +1,6 @@
package ru.gravit.launchserver.console;
import ru.gravit.launcher.LauncherNetworkAPI;
import ru.gravit.launcher.events.request.LogEvent;
import ru.gravit.launcher.request.websockets.LegacyRequestBridge;
import ru.gravit.launcher.request.websockets.RequestInterface;
@ -9,6 +10,13 @@
public class LogListenerCommand extends Command {
public class LogListenerRequest implements RequestInterface
{
@LauncherNetworkAPI
public LogHelper.OutputTypes outputType;
public LogListenerRequest(LogHelper.OutputTypes outputType) {
this.outputType = outputType;
}
@Override
public String getType() {
return "addLogListener";
@ -27,7 +35,7 @@ public String getUsageDescription() {
@Override
public void invoke(String... args) throws Exception {
LogHelper.info("Send log listener request");
LegacyRequestBridge.service.sendObject(new LogListenerRequest());
LegacyRequestBridge.service.sendObject(new LogListenerRequest(LogHelper.JANSI ? LogHelper.OutputTypes.JANSI : LogHelper.OutputTypes.PLAIN));
LogHelper.info("Add log handler");
LegacyRequestBridge.service.registerHandler((result) -> {
if(result instanceof LogEvent)

View file

@ -26,7 +26,7 @@ private static void printCommand(String name, Command command) {
ansi.a(command.getUsageDescription());
ansi.reset();
return ansi.toString();
});
}, () -> LogHelper.htmlFormatLog(LogHelper.Level.INFO, LogHelper.getDataTime(), String.format("<font color=\"green\">%s</font> <font color=\"cyan\">%s</font> - <font color=\"yellow\">%s</font>", name, args == null ? "[nothing]" : args, command.getUsageDescription()), true));
}
private static void printCategory(String name, String description)

View file

@ -168,7 +168,7 @@ public static String getDataTime()
@LauncherAPI
public static void log(Level level, String message, boolean sub) {
String dateTime = DATE_TIME_FORMATTER.format(LocalDateTime.now());
String jansiString = null, plainString = null;
String jansiString = null, plainString = null, htmlString = null;
for (OutputEnity output : OUTPUTS) {
if (output.type == OutputTypes.JANSI && JANSI) {
if (jansiString != null) {
@ -178,6 +178,14 @@ public static void log(Level level, String message, boolean sub) {
jansiString = ansiFormatLog(level, dateTime, message, sub);
output.output.println(jansiString);
} else if (output.type == OutputTypes.HTML) {
if (htmlString != null) {
output.output.println(htmlString);
continue;
}
htmlString = htmlFormatLog(level, dateTime, message, sub);
output.output.println(htmlString);
} else {
if (plainString != null) {
output.output.println(plainString);
@ -192,7 +200,12 @@ public static void log(Level level, String message, boolean sub) {
@LauncherAPI
public static void rawLog(Supplier<String> plainStr, Supplier<String> jansiStr)
{
String jansiString = null, plainString = null;
rawLog(plainStr, jansiStr, null);
}
@LauncherAPI
public static void rawLog(Supplier<String> plainStr, Supplier<String> jansiStr, Supplier<String> htmlStr)
{
String jansiString = null, plainString = null, htmlString = null;
for (OutputEnity output : OUTPUTS) {
if (output.type == OutputTypes.JANSI && JANSI) {
if (jansiString != null) {
@ -202,6 +215,14 @@ public static void rawLog(Supplier<String> plainStr, Supplier<String> jansiStr)
jansiString = jansiStr.get();
output.output.println(jansiString);
} else if (output.type == OutputTypes.HTML) {
if (htmlString != null) {
output.output.println(htmlString);
continue;
}
htmlString = htmlStr.get();
output.output.println(htmlString);
} else {
if (plainString != null) {
output.output.println(plainString);
@ -377,6 +398,23 @@ public static Ansi rawAnsiFormat(Level level, String dateTime, boolean sub)
return ansi;
}
public static String htmlFormatLog(Level level, String dateTime, String message, boolean sub)
{
String levelColor;
switch (level) {
case WARNING:
levelColor = "yellow";
break;
case ERROR:
levelColor = "red";
break;
default: // INFO, DEBUG, Unknown
levelColor = "white";
break;
}
return String.format("%s <b><font color=\"%s\">[%s] %s</font></b>", dateTime, levelColor, level.toString(), sub ? ' ' + message : message);
}
private static String ansiFormatVersion(String product) {
return new Ansi().bold(). // Setup
fgBright(Color.MAGENTA).a("GravitLauncher "). // sashok724's