91 lines
2.0 KiB
Java
91 lines
2.0 KiB
Java
package io.gitlab.jfronny.commons.logger;
|
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.slf4j.event.Level;
|
|
|
|
import java.util.*;
|
|
import java.util.function.Consumer;
|
|
|
|
public class MemoryLogger implements CompactLogger, Iterable<String> {
|
|
private final String name;
|
|
private final List<String> lines;
|
|
private final int size;
|
|
private final Level level;
|
|
|
|
public MemoryLogger(String name, Level level) {
|
|
this.name = Objects.requireNonNull(name);
|
|
this.lines = new LinkedList<>();
|
|
this.size = -1;
|
|
this.level = Objects.requireNonNull(level);
|
|
}
|
|
|
|
public MemoryLogger(String name, Level level, int size) {
|
|
this.name = Objects.requireNonNull(name);
|
|
this.lines = new ArrayList<>(size);
|
|
this.size = size;
|
|
this.level = Objects.requireNonNull(level);
|
|
}
|
|
|
|
@Override
|
|
public Level getLevel() {
|
|
return level;
|
|
}
|
|
|
|
@Override
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
private void add(String msg) {
|
|
synchronized (lines) {
|
|
int lz = lines.size();
|
|
if (size != -1 && lz >= size - 1) {
|
|
Iterator<String> iterator = lines.iterator();
|
|
for (int i = 0, max = lz - size + 1; i < max; i++) iterator.remove();
|
|
}
|
|
lines.add(msg);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void trace(String msg) {
|
|
add("[Ŧ] " + msg);
|
|
}
|
|
|
|
@Override
|
|
public void debug(String msg) {
|
|
add("[Đ] " + msg);
|
|
}
|
|
|
|
@Override
|
|
public void info(String msg) {
|
|
add("[I] " + msg);
|
|
}
|
|
|
|
@Override
|
|
public void warn(String msg) {
|
|
add("[W] " + msg);
|
|
}
|
|
|
|
@Override
|
|
public void error(String msg) {
|
|
add("[E] " + msg);
|
|
}
|
|
|
|
@NotNull
|
|
@Override
|
|
public Iterator<String> iterator() {
|
|
return lines.iterator();
|
|
}
|
|
|
|
@Override
|
|
public void forEach(Consumer<? super String> action) {
|
|
lines.forEach(action);
|
|
}
|
|
|
|
@Override
|
|
public Spliterator<String> spliterator() {
|
|
return lines.spliterator();
|
|
}
|
|
}
|