feat(logging): Factor out PrintStreamLogger from StdoutLogger to support logging to stderr and others

This commit is contained in:
Johannes Frohnmeyer 2024-01-19 09:04:57 +01:00
parent 75d41184c9
commit d72724f1fd
Signed by: Johannes
GPG Key ID: E76429612C2929F4
2 changed files with 91 additions and 75 deletions

View File

@ -0,0 +1,89 @@
package io.gitlab.jfronny.commons.logging;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.PrintStream;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Objects;
public class PrintStreamLogger implements Logger {
private final @Nullable String name;
private final boolean color;
private final boolean thread;
private final boolean timestamp;
private final PrintStream target;
public PrintStreamLogger(@NotNull PrintStream target, @Nullable String name, boolean color, boolean thread, boolean timestamp) {
this.target = Objects.requireNonNull(target);
this.name = name;
this.color = color;
this.thread = thread;
this.timestamp = timestamp;
}
@Override
public String getName() {
return name == null ? "" : name;
}
@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(level.color).append(level.name()).append(OutputColors.RESET).append(' ');
} else {
sb.append(level.name().charAt(0)).append(' ');
}
// Message
sb.append(msg);
return sb.toString();
}
}

View File

@ -1,14 +1,6 @@
package io.gitlab.jfronny.commons.logging;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class StdoutLogger implements Logger {
private final String name;
private final boolean color;
private final boolean thread;
private final boolean timestamp;
public class StdoutLogger extends PrintStreamLogger {
public StdoutLogger(String name) {
this(name, false);
}
@ -18,75 +10,10 @@ public class StdoutLogger implements Logger {
}
public StdoutLogger(String name, boolean color, boolean thread, boolean timestamp) {
this.name = name;
this.color = color;
this.thread = thread;
this.timestamp = timestamp;
super(System.out, name, color, thread, timestamp);
}
public static StdoutLogger fancy(String name) {
return new StdoutLogger(name, true, true, true);
}
@Override
public String getName() {
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(generateMessage(msg, Level.INFO));
}
@Override
public void warn(String 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();
}
}