98 lines
2.8 KiB
Java
98 lines
2.8 KiB
Java
package io.gitlab.jfronny.commons.logger;
|
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.Nullable;
|
|
import org.slf4j.event.Level;
|
|
|
|
import java.io.PrintStream;
|
|
import java.time.LocalTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.util.Objects;
|
|
|
|
public class PrintStreamLogger implements CompactLogger {
|
|
private final @Nullable String name;
|
|
private final boolean color;
|
|
private final boolean thread;
|
|
private final boolean timestamp;
|
|
private final Level level;
|
|
private final PrintStream target;
|
|
|
|
public PrintStreamLogger(@NotNull PrintStream target, @Nullable String name, Level level, boolean color, boolean thread, boolean timestamp) {
|
|
this.target = Objects.requireNonNull(target);
|
|
this.name = name;
|
|
this.level = level;
|
|
this.color = color;
|
|
this.thread = thread;
|
|
this.timestamp = timestamp;
|
|
}
|
|
|
|
@Override
|
|
public String getName() {
|
|
return name == null ? "" : name;
|
|
}
|
|
|
|
@Override
|
|
public Level getLevel() {
|
|
return level;
|
|
}
|
|
|
|
@Override
|
|
public void trace(String msg) {
|
|
target.println(generateMessage(msg, Level.TRACE));
|
|
}
|
|
|
|
@Override
|
|
public void debug(String msg) {
|
|
target.println(generateMessage(msg, Level.DEBUG));
|
|
}
|
|
|
|
@Override
|
|
public void info(String msg) {
|
|
target.println(generateMessage(msg, Level.INFO));
|
|
}
|
|
|
|
@Override
|
|
public void warn(String msg) {
|
|
target.println(generateMessage(msg, Level.WARN));
|
|
}
|
|
|
|
@Override
|
|
public void error(String msg) {
|
|
target.println(generateMessage(msg, Level.ERROR));
|
|
}
|
|
|
|
protected 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 (name != null) {
|
|
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(OutputColors.byLevel(level)).append(level.name()).append(OutputColors.RESET).append(' ');
|
|
} else {
|
|
sb.append(level.name().charAt(0)).append(' ');
|
|
}
|
|
// Message
|
|
sb.append(msg);
|
|
return sb.toString();
|
|
}
|
|
}
|