[main] Enhance StdoutLogger

This commit is contained in:
Johannes Frohnmeyer 2022-09-06 21:12:54 +02:00
parent 578f5d4056
commit 846766e3de
Signed by: Johannes
GPG Key ID: E76429612C2929F4
3 changed files with 165 additions and 5 deletions

View File

@ -4,6 +4,7 @@ import io.gitlab.jfronny.commons.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.*;
import java.util.Objects;
import java.util.function.Function;
@ -99,6 +100,13 @@ public interface Logger {
default String format(String msg, Throwable t) {
if (t == null) return msg;
return msg + System.lineSeparator() + t;
try (ByteArrayOutputStream baot = new ByteArrayOutputStream()) {
try (PrintStream ps = new PrintStream(baot, true)) {
t.printStackTrace(ps);
}
return msg + System.lineSeparator() + baot;
} catch (IOException e) {
return msg + System.lineSeparator() + t;
}
}
}

View File

@ -0,0 +1,76 @@
package io.gitlab.jfronny.commons.log;
public class OutputColors {
// Reset
public static final String RESET = "\033[0m"; // Text Reset
// Regular Colors
public static final String BLACK = "\033[0;30m"; // BLACK
public static final String RED = "\033[0;31m"; // RED
public static final String GREEN = "\033[0;32m"; // GREEN
public static final String YELLOW = "\033[0;33m"; // YELLOW
public static final String BLUE = "\033[0;34m"; // BLUE
public static final String PURPLE = "\033[0;35m"; // PURPLE
public static final String CYAN = "\033[0;36m"; // CYAN
public static final String WHITE = "\033[0;37m"; // WHITE
// Bold
public static final String BLACK_BOLD = "\033[1;30m"; // BLACK
public static final String RED_BOLD = "\033[1;31m"; // RED
public static final String GREEN_BOLD = "\033[1;32m"; // GREEN
public static final String YELLOW_BOLD = "\033[1;33m"; // YELLOW
public static final String BLUE_BOLD = "\033[1;34m"; // BLUE
public static final String PURPLE_BOLD = "\033[1;35m"; // PURPLE
public static final String CYAN_BOLD = "\033[1;36m"; // CYAN
public static final String WHITE_BOLD = "\033[1;37m"; // WHITE
// Underline
public static final String BLACK_UNDERLINED = "\033[4;30m"; // BLACK
public static final String RED_UNDERLINED = "\033[4;31m"; // RED
public static final String GREEN_UNDERLINED = "\033[4;32m"; // GREEN
public static final String YELLOW_UNDERLINED = "\033[4;33m"; // YELLOW
public static final String BLUE_UNDERLINED = "\033[4;34m"; // BLUE
public static final String PURPLE_UNDERLINED = "\033[4;35m"; // PURPLE
public static final String CYAN_UNDERLINED = "\033[4;36m"; // CYAN
public static final String WHITE_UNDERLINED = "\033[4;37m"; // WHITE
// Background
public static final String BLACK_BACKGROUND = "\033[40m"; // BLACK
public static final String RED_BACKGROUND = "\033[41m"; // RED
public static final String GREEN_BACKGROUND = "\033[42m"; // GREEN
public static final String YELLOW_BACKGROUND = "\033[43m"; // YELLOW
public static final String BLUE_BACKGROUND = "\033[44m"; // BLUE
public static final String PURPLE_BACKGROUND = "\033[45m"; // PURPLE
public static final String CYAN_BACKGROUND = "\033[46m"; // CYAN
public static final String WHITE_BACKGROUND = "\033[47m"; // WHITE
// High Intensity
public static final String BLACK_BRIGHT = "\033[0;90m"; // BLACK
public static final String RED_BRIGHT = "\033[0;91m"; // RED
public static final String GREEN_BRIGHT = "\033[0;92m"; // GREEN
public static final String YELLOW_BRIGHT = "\033[0;93m"; // YELLOW
public static final String BLUE_BRIGHT = "\033[0;94m"; // BLUE
public static final String PURPLE_BRIGHT = "\033[0;95m"; // PURPLE
public static final String CYAN_BRIGHT = "\033[0;96m"; // CYAN
public static final String WHITE_BRIGHT = "\033[0;97m"; // WHITE
// Bold High Intensity
public static final String BLACK_BOLD_BRIGHT = "\033[1;90m"; // BLACK
public static final String RED_BOLD_BRIGHT = "\033[1;91m"; // RED
public static final String GREEN_BOLD_BRIGHT = "\033[1;92m"; // GREEN
public static final String YELLOW_BOLD_BRIGHT = "\033[1;93m";// YELLOW
public static final String BLUE_BOLD_BRIGHT = "\033[1;94m"; // BLUE
public static final String PURPLE_BOLD_BRIGHT = "\033[1;95m";// PURPLE
public static final String CYAN_BOLD_BRIGHT = "\033[1;96m"; // CYAN
public static final String WHITE_BOLD_BRIGHT = "\033[1;97m"; // WHITE
// High Intensity backgrounds
public static final String BLACK_BACKGROUND_BRIGHT = "\033[0;100m";// BLACK
public static final String RED_BACKGROUND_BRIGHT = "\033[0;101m";// RED
public static final String GREEN_BACKGROUND_BRIGHT = "\033[0;102m";// GREEN
public static final String YELLOW_BACKGROUND_BRIGHT = "\033[0;103m";// YELLOW
public static final String BLUE_BACKGROUND_BRIGHT = "\033[0;104m";// BLUE
public static final String PURPLE_BACKGROUND_BRIGHT = "\033[0;105m"; // PURPLE
public static final String CYAN_BACKGROUND_BRIGHT = "\033[0;106m"; // CYAN
public static final String WHITE_BACKGROUND_BRIGHT = "\033[0;107m"; // WHITE
}

View File

@ -1,12 +1,27 @@
package io.gitlab.jfronny.commons.log;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class StdoutLogger implements Logger {
private final String name;
private final String prefix;
private final boolean color;
private final boolean thread;
private final boolean timestamp;
public StdoutLogger(String name) {
this(name, false);
}
public StdoutLogger(String name, boolean color) {
this(name, color, false, false);
}
public StdoutLogger(String name, boolean color, boolean thread, boolean timestamp) {
this.name = name;
this.prefix = "[" + name + "] ";
this.color = color;
this.thread = thread;
this.timestamp = timestamp;
}
@Override
@ -14,13 +29,74 @@ public class StdoutLogger implements Logger {
return name;
}
@Override
public void trace(String msg) {
System.out.println(generateMessage(msg, Level.TRACE));
}
@Override
public void debug(String msg) {
System.out.println(generateMessage(msg, Level.DEBUG));
}
@Override
public void info(String msg) {
System.out.println(prefix + msg);
System.out.println(generateMessage(msg, Level.INFO));
}
@Override
public void warn(String msg) {
System.err.println(prefix + msg);
System.out.println(generateMessage(msg, Level.WARN));
}
@Override
public void error(String msg) {
System.out.println(generateMessage(msg, Level.ERROR));
}
private String generateMessage(String msg, Level level) {
StringBuilder sb = new StringBuilder();
// Timestamp
if (this.timestamp) {
sb.append(DateTimeFormatter.ofPattern("HH:mm:ss.SSS").format(LocalTime.now())).append(' ');
}
// Thread name
if (this.thread) {
String thread = Thread.currentThread().getName();
if (this.color) {
sb.append(OutputColors.CYAN_BOLD).append(thread).append(OutputColors.RESET).append(' ');
} else {
sb.append('{').append(thread).append("} ");
}
}
// Logger name
if (this.color) {
sb.append(OutputColors.GREEN_BOLD).append(name).append(OutputColors.RESET).append(' ');
} else {
sb.append('(').append(name).append(") ");
}
// Level
if (this.color) {
sb.append(level.color).append(level.name()).append(OutputColors.RESET).append(' ');
} else {
sb.append(level.name().charAt(0)).append(' ');
}
// Message
sb.append(msg);
return sb.toString();
}
private enum Level {
TRACE(OutputColors.WHITE),
DEBUG(OutputColors.WHITE),
INFO(OutputColors.BLUE),
WARN(OutputColors.RED),
ERROR(OutputColors.RED_BOLD);
public final String color;
Level(String color) {
this.color = color;
}
}
}