feat(logging): Factor out PrintStreamLogger from StdoutLogger to support logging to stderr and others
This commit is contained in:
parent
75d41184c9
commit
d72724f1fd
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue