java-commons/commons-logger/src/main/java/io/gitlab/jfronny/commons/logger/PrintStreamLogger.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();
}
}